2016-11-16 2 views
0

Im имеющий суперкласс как следующее:Изменить значение абстрактного класса в абстрактном хранилище

@Entity 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public abstract class { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    protected long id = ""; 

    protected String firstname = ""; 

    protected String lastname = ""; 

    protected Address address = null; 

    // getter setter 

Как вы можете видеть, им с помощью TABLE_PER_CLASS анс в InheritanceType, и я хочу, чтобы это так.

Теперь я получил два подкласса унаследовав от Base

@Entity 
public class Consulter extends Base { 
    // other fields 
} 

@Entity 
public class Customer extends Base { 
    // other fields 
} 

Когда я теперь создать хранилище вроде следующего:

public interface Base_Repository extends JpaRepository<Base, Long> { 

} 

Will JPA быть в состоянии вернуть правильный объект из базы данных, когда я указать идентификатор конкретного типа? Так что-то вроде этого?

long id = 222;  

Customer customer = customerRepository.findeOne(id); 
Base base = baseRepository.findeOne(id); 

boolean equals = customer.equals(((Customer) base)); 

А также можно было бы сделать что-то подобное?

Address address = new Address(); 
address.setStreet("space street 42"); 
address.setCountry("Trump Nation"); 

addressRepository.save(address); 

Base base = baseRepository.findeOne(222); 
base.setAddress(address); 

baseRepository.save(base); 

Будет ли это работать или разве это невозможно?

ответ

1

Вы не можете сохранить абстрактную сущность, потому что абстрактные сущности не относятся к таблице базы данных. Вам нужно сохранить дочерний объект вместо абстрактного.

+0

ОК спасибо за этот ответ сэр. – Mulgard

Смежные вопросы