根据我的研究,似乎不可能实现,但这是我的用例。

我有一个名为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;

}

07-25 23:02