如何根据用户ID从两个表中获取数据? 的 * ** * ** * ** * ** * ** * * 角色类 * ** * ** * ** * ** * ** * ** * ** * *
@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;
的 的 ** * ** * ** * 的** * ** * ** * ** * 用户类< / EM> * ** * ** * ** * ** * ** * ** *
@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 :(得分: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文档中的示例中获取关联。
答案 1 :(得分:0)
您可以使用以下系列语句与User
一起提取Role
:
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();
Hibernate的默认提取策略是懒惰地获取关联,如果你想在Role
获取关联(这里是User
),你需要在代码中在运行时覆盖这些关联。第三个声明是通过将获取模式设置为JOIN
来完成此操作。此语句FetchMode.JOIN
会覆盖默认行为,因此Role
将与User
一起提取。