2013-10-24 39 views
0

如何根据用户标识从两个表中获取数据? * ** * ** * ** * ** * ** * *角色类* ** * ** * ** * ** * ** * ** * ** * *如何使用Hibernate从两个表(一对多关系)获取数据Createcriteria

@Entity 
    @Table(name = "IUC_CON_USER_ROLE_MAP") 
    public class Role { 
     @Id 
     @Column(name="F_ROLE_MAP_ID") 
     int rolemap; 

     @Column(name="F_ROLE_ID") 
     int roleid; 


     @OneToMany(mappedBy="role",fetch=FetchType.EAGER) 
     Set<User> F_USER_ID; 

** * ** * ** * ** * ** * ** * ** *用户等级* ** * ** * ** * ** * ** * ** *

@Entity 
    @Table(name = "IUC_CON_USER") 
    public class User implements Serializable { 


     @Id 
     @Column(name = "F_USER_ID") 
     private int id; 

     @Column(name = "F_USER_NAME") 
     private String name; 

     @Column(name = "F_USER_PWD") 
     private String pwd; 


     @ManyToOne 
     @JoinColumn(name="F_USER_ID",insertable=false,updatable=false) 
     private Role role; 

       ----------setter and getter for properties 
    } 

外部编辑: 标准创建代码:

DetachedCriteria uCrit = DetachedCriteria.forClass(User.class, "user"); 
uCrit.add(Restrictions.eq("user.id", 5)); 
uCrit.setProjection(Projections.property("user.id")); 
DetachedCriteria criteria = DetachedCriteria.forClass(Role.class, "role"); 
criteria.add(Property.forName("role.F_USER_ID").in(uCrit)); 
List lt1 = criteria.getExecutableCriteria(getSession()).list(); 
+0

你想获取'User'以及相关的'Role'? –

+0

@Debojit'是的,我想用户与角色' – NBR

回答

0

使用createAlias

criteria.createAlias("propertiy_of_main_entity", "aliastName"); 

对我来说,这通过一些实体属性名称获取与根实体关联的实体;

你的情况类似

createAlias("F_USER_ID", "roleUsers"); 

应该做的。

无论如何,为什么你的字段名后面的命名为Java的教义? WHY_IS_IT_UPPERCASED_WITH_DASHES_LIKE_CONSTANTS_?

总之一切都在Hibernate documentation解释。如果别名不起作用,就像在我提供的链接下从Hibernate文档中获取关联一样。

+0

'请如果你不介意你会详细说明上述代码' – NBR

+0

我做到了。第二个代码示例是指您的代码。 – Antoniossss

+0

@Antonisss我得到这个错误:-Exception在线程“主”org.hibernate.QueryException:无法解析属性:F_USER_ID:com.basu.User – NBR

0

您可以使用下面一系列语句与沿取UserRole

int userId = 1; 
Criteria criteria = session.createCriteria(User.class); 
criteria.setFetchMode("role", FetchMode.JOIN); 
criteria.add(Restrictions.eq("id", userId)); 
User user = (User) criteria.uniqueResult(); 

休眠的默认取的策略是懒洋洋地获取协会,你需要在代码运行时重写,如果您希望协会(此处为Role)与User一起提取。第三条语句是通过将获取模式设置为JOIN来完成此重写。此语句FetchMode.JOIN覆盖了默认行为,因此Role将与User一起提取。

+0

@Saikai当我执行上面的代码我得到错误,而且在控制台中生成的查询User.id不是与Role.F_user_id映射Role_map_id是与User.id映射。 – NBR

+0

但您提供的Criteria创建代码与我答案中的代码不同。你有没有试过我的代码? –

+0

@Saikai其实用户表中有一行F_User_id = 1,但我得到以下错误:-Exception在线程“main”org.hibernate.ObjectNotFoundException:没有行与给定的标识符存在:[com.basu.Role#1 ] – NBR

相关问题