我有一个像这样的超类:
@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> {
}
当我提供具体类型的id时,jpa是否能够从数据库返回正确的对象?是这样的吗?
long id = 222;
Customer customer = customerRepository.findeOne(id);
Base base = baseRepository.findeOne(id);
boolean equals = customer.equals(((Customer) base));
jpa也有可能做这样的事情吗?
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);
这个可行吗?
不能保存抽象实体,因为抽象实体不能映射到数据库表。您需要保存子实体,而不是抽象实体。