修改抽象存储库中抽象类的值



我有一个像这样的超类:

@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_CLASSInheritanceType,我想保持这样。

现在我有两个子类继承自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);

这个可行吗?

不能保存抽象实体,因为抽象实体不能映射到数据库表。您需要保存子实体,而不是抽象实体。

最新更新