Java Hibernate映射和查询

Java Hibernate映射和查询,java,hibernate,mapping,Java,Hibernate,Mapping,my hbm.xml的hibernate映射为: <class name="UserCalendar" table="user_calendar"> <id name="userCalendarId" column="user_calendar_id" type="long"> <generator class="native" /> </id> <property name="userId" colu

my hbm.xml的hibernate映射为:

<class name="UserCalendar" table="user_calendar">
    <id name="userCalendarId" column="user_calendar_id" type="long">
        <generator class="native" />
    </id>
    <property name="userId" column="user_id" type="long" not-null="true"/>
    <property name="userLoginName" column="user_login_name" type="string" not-null="true" length="32000" />
    <property name="userName" column="user_name" type="string" not-null="true" length="32000" />
    <list name="userDates" cascade="all" lazy="false">
        <key column="user_calendar_id"/>
        <index column="idx"/>
        <one-to-many class="UserDate"/>
    </list>
</class>

<class name="UserDate" table="user_date">
    <id name="userDateId" column="user_date_id" type="long">
        <generator class="native" />
    </id>
    <property name="date" column="date" type="date"/>
    <list name="userItems" cascade="all" lazy="false">
        <key column="user_date_id"/>
        <index column="idx"/>
        <one-to-many class="UserItem"/>
    </list>
</class>

<class name="UserItem" table="user_item">
    <id name="userItemId" column="user_item_id" type="long">
        <generator class="native"/>
    </id>
    <property name="spaceId" column="space_id" type="long"/>
    <property name="spaceName" column="space_name" type="string"/>
    <property name="itemRefId" column="item_ref_id" type="string"/>
    <property name="itemId" column="item_id" type="long"/>
    <property name="allocation" column="allocation" type="double"/>
    <property name="scheduledStrategy" column="scheduled_strategy" type="integer"/>
    <property name="utilization" column="utilization" type="double"/>
    <property name="deadline" column="deadline" type="date"/>
    <property name="ticketType" column="ticket_type" type="integer"/>
    <property name="isCurrentlyAssigned" column="is_currently_assigned" type="boolean"/>
</class>
现在我想选择那些具有特定
itemId
UserCalendar
对象。如果我在
UserItem
中插入
userCalendarId
并执行

SELECT USERCALENDAR 
FROM USER_CALENDAR 
WHERE USERCALENDAR.USERCALENDARID IN 
    (SELECT USERCALENDARID 
     FROM USERITEM
     WHERE USERITEM.ITEMID=ID)
那就有可能了

我说得对吗

如何在
UserItem
中插入
userCalendarId
?这需要什么映射


感谢和问候。

要拥有
一对多
,您需要在
UserDate
中的列引用
UserCalendar.userCalendarId
UserItem
中的列引用
UserDate.userDateId
。您需要通过这些类中的多对一指定这些列

然后你可以使用join

SELECT * FROM user_calendar uc 
         JOIN user_date ud ON ud.user_calendar_id=uc.user_calendar_id
         JOIN user_item ui ON ui.user_date_id=ud.user_date_id
         WHERE ui.user_item_id=<your value>

如果您通过
many-to-one
添加属性
userDate
userCalendar
,使
具有一对多
,则需要
userDate
中的列引用
userCalendar.userCalendarId
UserItem
中的列引用
userDate.userDateId
。您需要通过这些类中的多对一指定这些列

然后你可以使用join

SELECT * FROM user_calendar uc 
         JOIN user_date ud ON ud.user_calendar_id=uc.user_calendar_id
         JOIN user_item ui ON ui.user_date_id=ud.user_date_id
         WHERE ui.user_item_id=<your value>
前提是您通过
多对一
添加了属性
userDate
userCalendar

SELECT USERCALENDAR 
FROM USER_CALENDAR 
WHERE USERCALENDAR.USERCALENDARID IN 
    (SELECT USERCALENDARID 
     FROM USERITEM
     WHERE USERITEM.ITEMID=ID)
SELECT * FROM user_calendar uc 
         JOIN user_date ud ON ud.user_calendar_id=uc.user_calendar_id
         JOIN user_item ui ON ui.user_date_id=ud.user_date_id
         WHERE ui.user_item_id=<your value>
select ui.userDate.userCaledar from UserItem ui where ui.userItemId=:id