hibernate 关联映射用的多吗?

hibernate关联映射感觉特别麻烦,实际项目中用的多吗?如果不用的话,那么用什么方法来实现联合查询呢?例如:有表A含有a_userid,a_username,表B中含... hibernate 关联映射感觉特别麻烦,实际项目中用的多吗?

如果不用的话,那么用什么方法来实现联合查询呢?
例如:
有表A含有 a_userid, a_username, 表B中含有 b_id, b_userid,b_userdesc,需要通过 a_userid 对表A和表B联合查询得到 a_userid,a_usernam,b_userdesc 这三个属性,应该怎么通过 hibernate 映射呢?
展开
 我来答
maye100
推荐于2016-08-06 · TA获得超过2650个赞
知道小有建树答主
回答量:1341
采纳率:100%
帮助的人:980万
展开全部

其实Hibernate的这种个映射看上去很烦,但你弄明白之后会发现挺好用的

实际项目中如果整合了Hibernate 那么基本大部分查询都会涉及到一对多,多对一,多对多这汇总关系。

如果不用Hibernate ,可以用ibatis,这个基本就是靠你自己写原生的sql来查询


你举的那个例子:

首先你要弄明白这两个表之间什么关系?一对多还是一对一?

我给你举个一对多例子吧,比如用户(user)和部门(team),一个部门可以有多个用户,但一个用户只能属于一个部门


先是team类,省略了其它属性,只写重点


@Entity
@Table(name = "tn_team")//和数据中表面一致
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)//这个是缓存的配置
public class Team implements Serializable {//序列化
    private List<User> userList = Lists.newArrayList();//user数组
    
    @OneToMany(mappedBy = "team")//告诉hibernate这是一个一对多的关系,mappedby的意思自己百度,我就不写了
    @Fetch(FetchMode.SUBSELECT)//加载策略
    @OrderBy("name ASC")//联合查询时的排序策略
    public List<User> getUserList() {
        return userList;
    }
    public void setUserList(List<User> userList) {
        this.userList = userList;
    }
}


然后是user类


@Entity
@Table(name = "tn_user")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class User implements Serializable {
    private Team team;
    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "team_id")//这个就是外键字段,就是你例子中的userid
    public Team getTeam() {
        return team;
    }
    public void setTeam(Team team) {
        this.team = team;
    }
}

以上配置基于注解方式,多看看基础文章

追问
因为目前公司没有用任何的框架,就纯 servlet,象平时遇到这种情况都是建立一个临时实体用 sql 语句进行联合查询就行。

另外想问下,xml 配置和 annotation 目前哪个用的多一点呢?因为书上都是用的 xml
追答
xml配置已经没人用了,书上那么写是因为书的出版时间太旧了
以后所有类似(不只hibernate)的配置都将使用注入的方式
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式