我如何将多个类映射到休眠中的一个表? [英] How can i map multiple classes to one table in hibernate?

查看:91
本文介绍了我如何将多个类映射到休眠中的一个表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

从我的研究看来,它似乎不太可能,但这里是我的用例。



我有一张名为user的表格,其地址标识为



我想将UserReference和User类映射到此表,其中UserReference不包含Address对象(以节省sql连接时间),User 包含Address对象(在需要的情况下)。

我不能使用它,因为它期望一个连接表,并且我不能只定义两个单独的类,因为一个get()似乎返回每一行的两倍(一个用于用户,一个用于UserReference)。



有人知道我该怎么做吗?






我想我应该试着更好地解释我自己。

  public class UserReference {
private int id;
私人字符串名称;
}

公共类用户扩展UserReference {
私人地址;
}

我想映射UserReference和User,以便查询UserReference当我只需要基本的细节时,以及用户每当我需要完整的对象时。



据我所知,我可以简单地将地址延迟加载,但我有一个两层系统,它在所有物体通过图层后都会取消所有对象。






编辑:



也许我的问题太模糊了,但根据答案,我不想做我想做的事。

解决方案

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扩展UserReference {
@OneToOne
@JoinColumn =address_id)
私有地址;

}


From my research it seems not likely that its possible, but here is my use case.

I have a table called user with an address id.

I'd like to map a UserReference and User class to this table where UserReference does not contain the Address object (to save sql joining time) and User does contain the Address object (in case it's needed).

I can't use since it expects a join table, and I can't just define two separate classes because a get() seems to return double of every row (one for User, one for UserReference).

Does anyone know how I could go about this?


I guess I should try to explain myself better.

public class UserReference {
    private int id;
    private String name;
}

public class User extends UserReference {
    private Address;
}

I'd like to map both UserReference and User so that I can query for UserReference when I only need the basic details, and User whenever I need the full object.

I understand that I can simply have Address be lazy loaded but I have a two tier system which unproxies all objects once it passes through the layers.


edit:

Perhaps my question was too ambigious but based on the answers it doesn't seem very possible to do what I want. Thanks anyway everyone.

解决方案

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;

}

这篇关于我如何将多个类映射到休眠中的一个表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆