您的位置:首页 > 编程语言 > Java开发

Myeclipse 自动生成 hibernate 中…

2018-03-25 16:01 453 查看
简单问题假设:学生与学校之间的 1:n 的关系

一、定义 POJO :

public class Person

{

private Integer id;

private String name;

private Integer age;

private List<String> school = new
ArrayList<String>();

//////////////////////////

省略 set/get 方法

}

二、定义 person.hbm.xml 文件:

<hibernate-mapping>

 <class catalog="vmmaster"
name="Database.Person" table="Person">

  <id name="id"
type="java.lang.Integer">

   <column
name="id" />

   <generator
class="native" />

  </id>

  <property
generated="never" lazy="false" name="name"

   type="java.lang.String">

   <column
length="50" name="name" not-null="true" unique="true"
/>

  </property>

  <property
generated="never" lazy="false" name="age"

   type="java.lang.Integer">

   <column
name="age" />

  </property>

  <list
name="school" table="tb_School">

   <key
column="personid" not-null="true"/>

   <list-index
column="list_order">

   </list-index>

   <element
column="name" type="string">

   </element>

  </list>

 </class>

</hibernate-mapping>

三、编写测试程序:

 public static void main(String[] args) {

  Configuration cfg = new
Configuration().configure();

  SessionFactory sf =
cfg.buildSessionFactory();

  Session sess =
sf.openSession();

  Transaction tx =
sess.beginTransaction();

  // News n = new
News();

  Person p = new Person();

  p.setName("hehebaixibao");

  p.setAge(24);

  

  List<String>
school = new
ArrayList<String>();

  school.add("第八初中");

  school.add("第一中学");

  p.setSchool(school);

  sess.save(p);

  tx.commit();

  sess.close();

  sf.close();

四、查看数据库:Hibernate已经帮我们自动生成了Person表和School表,其中Person表结构按照Person.hbm.xml文件中的属性定义,而School表又List中的属性定义。

由List定义的School,没有逻辑主键,而是由外键和element值共同组成联合主

五、Hibernate反向生成 PO 对象:

重点在这里:

反向生成的School.hbm.xml文件中,会看到如下结构:

 <class name="Database.TbSchool"
table="tb_School" catalog="vmmaster">

       
<composite-id name="id"
class="Database.TbSchoolId">

           
<key-many-to-one name="Person"
class="Database.Person">

               
<column name="personid" />

           
</key-many-to-one>

           
<key-property name="listOrder"
type="java.lang.Integer">

               
<column name="list_order" />

           
</key-property>

       
</composite-id>

       
<property name="name"
type="java.lang.String">

           
<column name="name" />

       
</property>

   
</class>

其中,id为复合主键composite-id,由一个新创建的类:tb_SchoolId 实现

tb_SchoolId类代码如下:

public class TbSchoolId implements java.io.Serializable {

 // Fields

 private Person Person;

 private Integer listOrder;

 // Constructors

 

 public TbSchoolId() {

 }

 

 public TbSchoolId(Person tbPerson, Integer
listOrder) {

  this.Person = tbPerson;

  this.listOrder =
listOrder;

 }

 // Property accessors

.............................................................

从这个自动生成的复合主键类可以看到,通过school,还可以反向查询person对象!

多么方便啊!!

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: