我是hibernate
的新手,并试图理解它。我有以下表格: -
我们有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
作为所有表中的外键。在这种情况下,我们必须为Session_tbl
中的所有类设置Set。因为我们只需要来自Stock_tbl
的会话详细信息,所有剩余的99个表(当需要fetch 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>
问题:
为什么我需要在Session_tbl类中使用set,因为我不想从这里获取股票?我只需要下面的课程中的Session_tbl对象。
为什么在Sesison_tbl表中需要这种映射?对于所有100个班级,我必须在这里创建映射吗?
答案 0 :(得分:1)
您只能在Stock_tbl类中定义关系的ManyToOne部分。 如果他们不想将sessionip用于Session,则无需向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>
使用anotation(建议使用代替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类。 然后,您不提供任何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
}