2015-04-09 5 views
1

Я новичок в hibernate и пытаюсь понять его. У меня есть ниже таблиц: -Hibernate Mapping

Мы session_tbl таблицу, как показано ниже: -

Session_ID | Creation_Time 
1   | 23-Mar-2014 
2   | 24-Mar-2014 
3   | 25-Mar-2014 
4   | 26-Mar-2014 


and stock_tbl as below :- 

Stock_id | price | session_id 
1   | 11.00 | 1 
2   | 12.00 | 1 
3   | 43.00 | 1 
4   | 51.00 | 2 
5   | 85.00 | 4 
6   | 61.00 | 3 
7   | 66.00 | 2 
8   | 81.00 | 1 

в выше session_id использует в качестве внешнего ключа для session_tbl.

В hibernate как мы можем указать отображение в файле xml? Я хочу получить только данные stock_tbl, я никогда не буду запрашивать session_tbl, чтобы получить товар.

Session_tbl объект должен быть создан в Stock_tbl классе. Но нет Stock_tbl объект с Session_tbl класс.

Мы хотим использовать session_tbl для отслеживания цели, у нас есть более 100 таблиц, которые имеют session_tbl как внешний ключ во всей таблице. в этом случае нам нужно поставить Set для всех классов в Session_tbl ненужным. Поскольку нам нужны данные сеанса только от Stock_tbl, и все остальные остаются 99 таблицами (при необходимости выборки session_tbl - ленивая загрузка).

Я создал отображение, как показано ниже: -

public class Session_tbl { 
    private int session_id; 
    private String dateTime; 
    private Set<Stock_tbl> stockTbl; 
    // Question 1 


.. Getter and Setter 
} 

public class Stock_tbl{ 
    private int stock_id; 
    private Session_tbl sessionTbl; 
    private int price; 

.. Getter and Setter 
} 

<class name="Session_tbl" table="session_tbl"> 

     <id name="session_id" type="int" column="session_id"> 
     <generator class="native"/> 
     </id> 
     <set name="stockTbl" cascade="all"> 
     <key column="stock_id"/> 
     <one-to-many class="Stock_tbl"/> 
     </set> 
     // Question 2 
...... 

</Class> 

<class name="Stock_tbl" table="stock_tbl"> 

     <id name="stock_id" type="int" column="stock_id"> 
     <generator class="native"/> 
     </id> 
     .... 
    </class> 

Вопрос:

  1. Почему я должен использовать набор в классе Session_tbl, потому что я не хочу, чтобы принести запас отсюда? Мне нужен только объект Session_tbl в классе ниже.

  2. Почему это сопоставление необходимо в таблице Sesison_tbl? для всех 100 классов мне нужно создать там отображение здесь?

+0

Публикация структуры таблицы в качестве операторов CREATE TABLE обычно облегчает ответы пользователей. –

+0

Вопрос личного вкуса. Структура таблицы в ее текущем формате достаточно ясна. – Zielu

ответ

1

Вы определяете только часть отношений ManyToOne в своем классе Stock_tbl. Вам не нужно ничего добавлять к классу Session_tbl или любому другому из ваших 100 классов, если они не хотят использовать свои отношения к сеансу.

<class name="Stock_tbl" table="stock_tbl"> 

     <id name="stock_id" type="int" column="stock_id"> 
     <generator class="native"/> 
     </id> 
     <many-to-one name="sessionTbl" column="session_id" class="Session_tbl" not-null="true"/> 
     .... 
</class> 
<class name="Session_tbl" table="session_tbl"> 

     <id name="session_id" type="int" column="session_id"> 
     <generator class="native"/> 
     </id> 
     //remove the stockTbl field from the Session class 
</Class> 

С эту заметку (рекомендуется вместо XML в качестве отображения рядом с вашим кодом), он просто выглядит так:

@Entity 
public class Stock_tbl{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int stock_id; 
    @ManyToOne 
    @JoinColumn(name="session_id") 
    private Session_tbl sessionTbl; 
    private int price; 

.. Getter and Setter 
} 

@Entity 
public class Session_tbl { 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int session_id; 
    private String dateTime; 
    //remove the stock if you dont want to use it 
.. Getter and Setter 
} 

Если вы не означает, что вы действительно не хотите иметь Класс сеанса вообще. Тогда вы не предоставляете никакого сопоставления Session_tbl. Внутри вашего Stock_tbl вы определили только столбец для session_id, и вам нужно будет обрабатывать его самостоятельно (то есть установить правильное значение sessionId).

@Entity 
public class Stock_tbl{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int stock_id; 

    private int session_id; //now it is a simple id, not relationships/objectc 
    private int price; 
.. Getter and Setter 
} 
+0

Спасибо за ответ. –