根据我的研究,似乎不可能实现,但这是我的用例。
我有一个名为user的表,其地址为ID。
我想将UserReference和User类映射到此表,其中UserReference不包含Address对象(以节省sql连接时间),而User确实包含Address对象(以防需要)。
我不能使用它,因为它需要一个连接表,而且我不能只定义两个单独的类,因为get()似乎返回每一行的两倍(一个用于User,一个用于UserReference)。
有人知道我该怎么做吗?
我想我应该尝试更好地解释自己。
public class UserReference {
private int id;
private String name;
}
public class User extends UserReference {
private Address;
}
我想同时映射UserReference和User,以便在只需要基本详细信息时可以查询UserReference,而在需要完整对象时可以查询User。
我知道我可以简单地将Address延迟加载,但是我有一个两层系统,一旦它通过层,它将取消代理所有对象。
编辑:
也许我的问题过于模棱两可,但基于答案,似乎不太可能做我想做的事情。谢谢大家
最佳答案
UserReference.java
@Entity
@DiscriminatorColumn(name = "type")
@DiscriminatorValue(value = "UserReference")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class UserReference extends BaseEntity {
private String name;
}
User.java
@Entity
@DiscriminatorValue(value = "User")
public class User extends UserReference {
@OneToOne
@JoinColumn(name = "address_id")
private Address address;
}