2011-06-07 137 views
2

我的hbm.xml的Hibernate映射是: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> 

的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; 
    } 
} 

現在我想選擇那些具有特定itemId的對象UserCalendar。我想,如果我在UserItem插入userCalendarId和執行

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

則是可能的。

我對不對?

如何在UserItem中插入userCalendarId?這需要什麼映射?

感謝和問候。

回答

0

要有one-to-many你需要引用UserCalendar.userCalendarId和列UserDateUserItemUserDate.userDateId。您需要在這些類中通過many-to-one指定這些列。

然後你可以使用加入

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_iduser_dateuser_item

在HQL中它會更簡單,但我不記得在我頭上。檢查文檔。 這可能是通過many-to-one

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

前提是你添加的屬性userDateuserCalendar