0

如何根据用户 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;

** * ** * ** * ** * ** * ** * ** *用户类* ** * ** * ** * ** * ** * ** *

    @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();
4

2 回答 2

0

利用createAlias

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

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

在你的情况下,像

createAlias("F_USER_ID", "roleUsers");

应该做。

无论如何,为什么您的字段名称不遵循 Java 的 commong 命名原则?为什么_IS_IT_UPPERCASED_WITH_DASHES_LIKE_CONSTANTS_?

总而言之,一切都在Hibernate 文档中进行了解释。如果别名不起作用,则从我提供的链接下的 Hibernate 文档中获取示例中的关联。

于 2013-10-24T12:30:05.077 回答
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. 第三条语句通过将 fetch 模式设置为JOIN. 此语句FetchMode.JOIN覆盖默认行为,因此Role将与User.

于 2013-10-24T12:53:06.727 回答