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对象!
多么方便啊!!
一、定义 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对象!
多么方便啊!!
相关文章推荐
- JPA项目使用myeclipse创建带注解的model实体类&web工程使用MyEclipse自动生成hibernate映射文件和实体类
- myeclipse6.5 自带Hibernate Reverse Engineering工具自动生成实体和dao时找不到项目工程
- myeclipse自动生成hibernate的Mapping和po文件
- Myeclipse自动生成hibernate的entity
- MyEclipse自动生成hibernate映射文件
- 用myeclipse自动生成hibernate配置文件
- myeclipse 逆向工程生成根据…
- Hibernate框架由myeclipse自动生成遇到的问题
- 用MyEclipse自动生成hibernate映射文件和实体类
- Myeclipse自动生成hibernate映射文件
- 用MyEclipse自动生成hibernate映射文件和实体类
- MyEclipse自动生成hibernate实体类和配置文件攻略
- Myeclipse自动生成java的Bean和BeanName.hbm.xml文件(java项目必须支持Hibernate)
- 关于MyEclipse中Hibernate实现数据库和到工程文件实体类的映射,自动生成POJO
- myeclipse的hibernate自动生成的DAO不写数据库的解决办法
- myeclipse自动生成hibernate的Mapping和po文件
- myeclipse中如何自动生成hibernate得POJO和hbm.xml文件
- MyEclipse自动生成Hibernate配置文件时的一个错误
- HibernateSessionFactory (MyEclipse自动生成版)
- 在MyEclipse自动生成hibernate配置文件