Отображение и запрос в спящем режиме - PullRequest
2 голосов
/ 07 июня 2011

Отображение hibernate моего 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?Какое сопоставление необходимо для этого?

Спасибо и всего наилучшего.

1 Ответ

0 голосов
/ 07 июня 2011

Чтобы иметь 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_id и user_date_id в user_date и user_item.

В HQL это будет проще, но я не помню, что у меня над головой. Проверьте документы. Это может быть что-то вроде

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

При условии, что вы добавили свойства userDate и userCalendar через many-to-one

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...