hibernate查表问题 hibernate中两张表是多对多的关系,如何通过a表查询b表的信息呢?麻烦大家详细点解答,谢谢了,小弟100分全部送上啦 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 建议试在持久化类中设置Set包含多的对象的字段,在ORM中配置<set>试试,看是否可行,实在没见过数据库设计直接用多对多关系来做的 由于多对多关联的性能不佳(由于引入了中间表,一次读取操作需要反复数次查询),因此在设计中应该避免大量使用或者说避免使用.同时,在多对多关系中,应根据情况,采取延迟加载(Lazy loading)机制来避免无谓的性能开销. 怎么写。你在网上搜一个hibernate 多对多,有很例子。 但我想说的是,一点常见的错误 有一个session is close 。 这个是因为,在极联操作的时候,第一次select 完的时候它把session关了。 这时候,你可以设置layz=false;这种方式问题可以解决,但 是不太好的, 假如你是web的程序,你可以用一个filter 也可以用这种式Hibernate.initialize 还有一个session不同步。 等等。。 东西,还是很多的,N人和菜鸟,在效率上有很大的区别,可控性不太好。 本人 是菜鸟 关联是否已经建立,基于注释的关联给你个简单例子这是用户表和角色表的多对多关联,用户表(Users)---用户角色关联表(UserRoles)--角色表(Roles)import java.io.Serializable;import java.util.Collection;import javax.persistence.*;@Entity@Table(name = "Users")public class User implements Serializable { @Id @Column(name = "id", nullable = false) @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @Column(name = "name") private String name; @JoinTable(name = "UserRoles", joinColumns = {@JoinColumn(name = "userId", referencedColumnName = "id")}, inverseJoinColumns = {@JoinColumn(name = "roleId", referencedColumnName = "id")}) @ManyToMany(cascade = CascadeType.ALL) private Collection<Role> roleIdCollection; //get/set方法}package com.lan.baseproject.entity;import java.io.Serializable;import java.util.Collection;import javax.persistence.*;@Entity@Table(name = "Roles")public class Role implements Serializable { @Id @Column(name = "id", nullable = false) @GeneratedValue(strategy=GenerationType.AUTO) private Long id; @Column(name = "name") private String name; @ManyToMany(mappedBy = "roleIdCollection") private Collection<User> userIdCollection; //get/set方法}如果通过一方获取另一方的信息很简单,比如知道了User类那只需要Collection<Role> roles= user.getRoleIdCollection();//注意延迟加载的细节问题具体的请参见hibernate的anotation文档,或者hibernate实战 opensessioninview 就搞定了,虽然效率上存在问题,但还是被极力赞扬的 找到映射文件中<set>标签加上lazy="false"就行了,听说效率不好,不过确实很简单就查出来了 在Session没有关闭前调用collection.size(),这样就会触发加载机制。或者你把Transaction前置到Controller层 刚学java,是个新手!求助…… 下拉框级 联数据库实现 第一个下拉框内容如何一开始就显示 spring对数据库链接超时的配置,跪求解答。 关于jpos的使用 myeclipse启动tomcat时报错,本菜鸟跪求解决办法 [高分求解] 怎么把这个代码改成泛型 有关eWebEditor在线编辑器问题 jsp 连接sqlserver错误 如何实现注册完就自动登入网站! jsp里面关于字符串的奇怪问题,请高手进来看看 厦门jsp服务器 还需要什么?
但我想说的是,一点常见的错误
有一个session is close 。
这个是因为,在极联操作的时候,第一次select 完的时候它把session关了。
这时候,你可以设置layz=false;这种方式问题可以解决,但 是不太好的,
假如你是web的程序,你可以用一个filter
也可以用这种式Hibernate.initialize
还有一个session不同步。
等等。。 东西,还是很多的,N人和菜鸟,在效率上有很大的区别,可控性不太好。
本人 是菜鸟
这是用户表和角色表的多对多关联,用户表(Users)---用户角色关联表(UserRoles)--角色表(Roles)
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.*;@Entity
@Table(name = "Users")
public class User implements Serializable {
@Id
@Column(name = "id", nullable = false)
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(name = "name")
private String name;
@JoinTable(name = "UserRoles", joinColumns = {@JoinColumn(name = "userId", referencedColumnName = "id")}, inverseJoinColumns = {@JoinColumn(name = "roleId", referencedColumnName = "id")})
@ManyToMany(cascade = CascadeType.ALL)
private Collection<Role> roleIdCollection;
//get/set方法
}package com.lan.baseproject.entity;
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.*;@Entity
@Table(name = "Roles")
public class Role implements Serializable {
@Id
@Column(name = "id", nullable = false)
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(name = "name")
private String name;
@ManyToMany(mappedBy = "roleIdCollection")
private Collection<User> userIdCollection;
//get/set方法
}如果通过一方获取另一方的信息很简单,比如知道了User类
那只需要
Collection<Role> roles= user.getRoleIdCollection();//注意延迟加载的细节问题
具体的请参见hibernate的anotation文档,或者hibernate实战
opensessioninview 就搞定了,虽然效率上存在问题,但还是被极力赞扬的
听说效率不好,不过确实很简单就查出来了