我的hbm.xml的休眠映射为:

<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>


UserCalendar.java:

public class UserCalendar implements Serializable {

    private static final long serialVersionUID = 10172L;

    private long userCalendarId;
    private long userId;
    private String userLoginName;
    private String userName;
    private List<UserDate> userDates;

    public UserCalendar() {

    }

    public long getUserCalendarId() {
        return userCalendarId;
    }

    public void setUserCalendarId(long userCalendarId) {
        this.userCalendarId = userCalendarId;
    }

    public long getUserId() {
        return userId;
    }

    public void setUserId(long userId) {
        this.userId = userId;
    }

    public String getUserLoginName() {
        return userLoginName;
    }

    public void setUserLoginName(String userLoginName) {
        this.userLoginName = userLoginName;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public List<UserDate> getUserDates() {
        return userDates;
    }

    public void setUserDates(List<UserDate> userDates) {
        this.userDates = userDates;
    }

}


UserDate.java:

public class UserDate implements Serializable {

    private static final long serialVersionUID = 10173L;

    private long userDateId;
    private Date date;
    private List<UserItem> userItems;

    public UserDate() {

    }

    public long getUserDateId() {
        return userDateId;
    }

    public void setUserDateId(long userDateId) {
        this.userDateId = userDateId;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public Date getDate() {
        return date;
    }

    public List<UserItem> getUserItems() {
        return userItems;
    }

    public void setUserItems(List<UserItem> userItems) {
        this.userItems = userItems;
    }
}


和UserItem.java:

public class UserItem implements Serializable {

    private static final long serialVersionUID = 10174L;

    public static final int AUTO = 1;
    public static final int EQUAL = 2;
    public static final int CUSTOM = 3;
    public static final int CUSTOM_EQUAL = 4;

    public static final int GENERAL_TICKET = 5;
    public static final int SPECIAL_TICKET_HALF = 6;
    public static final int SPECIAL_TICKET_FULL = 7;

    private long userItemId;
    private long spaceId;
    private String spaceName;
    private long itemId;
    private String itemRefId;
    private double allocation;
    private int scheduledStrategy;
    private double utilization;
    private Date deadline;
    private int ticketType;
    private boolean isCurrentlyAssigned;

    public UserItem() {

    }

    public long getUserItemId() {
        return userItemId;
    }

    public void setUserItemId(long userItemId) {
        this.userItemId = userItemId;
    }

    public long getSpaceId() {
        return spaceId;
    }

    public void setSpaceId(long spaceId) {
        this.spaceId = spaceId;
    }

    public long getItemId() {
        return itemId;
    }

    public void setItemId(long itemId) {
        this.itemId = itemId;
    }

    public double getAllocation() {
        return allocation;
    }

    public void setAllocation(double allocation) {
        this.allocation = allocation;
    }

    public int getScheduledStrategy() {
        return scheduledStrategy;
    }

    public void setScheduledStrategy(int scheduledStrategy) {
        this.scheduledStrategy = scheduledStrategy;
    }

    public double getUtilization() {
        return utilization;
    }

    public void setUtilization(double utilization) {
        this.utilization = utilization;
    }

    public Date getDeadline() {
        return deadline;
    }

    public void setDeadline(Date deadline) {
        this.deadline = deadline;
    }

    public int getTicketType() {
        return ticketType;
    }

    public void setTicketType(int ticketType) {
        this.ticketType = ticketType;
    }

    public String getSpaceName() {
        return spaceName;
    }

    public void setSpaceName(String spaceName) {
        this.spaceName = spaceName;
    }

    public String getItemRefId() {
        return itemRefId;
    }

    public void setItemRefId(String itemRefId) {
        this.itemRefId = itemRefId;
    }

    public boolean isCurrentlyAssigned() {
        return isCurrentlyAssigned;
    }

    public void setCurrentlyAssigned(boolean isCurrentlyAssigned) {
        this.isCurrentlyAssigned = isCurrentlyAssigned;
    }
}


现在,我要选择具有特定UserCalendar的那些itemId对象。我认为如果我在userCalendarId中插入UserItem并执行

SELECT USERCALENDAR
FROM USER_CALENDAR
WHERE USERCALENDAR.USERCALENDARID IN
    (SELECT USERCALENDARID
     FROM USERITEM
     WHERE USERITEM.ITEMID=ID)


那就有可能

我对吗?

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

谢谢并恭祝安康。

最佳答案

要拥有one-to-many,您将需要UserDate中的列引用UserCalendar.userCalendarId,并且需要UserItem中的列引用UserDate.userDateId。您将需要通过这些类中的many-to-one指定这些列。

那你可以用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>


假设您在user_calendar_iduser_date_id中有那些新列user_dateuser_item

在HQL中,它会更简单,但是我不记得要动弹了。检查文档。
可能是这样的

select ui.userDate.userCaledar from UserItem ui where ui.userItemId=:id


前提是您通过userDate添加了属性userCalendarmany-to-one

09-25 20:16