1、many-to-one单向关联:
a).hbm.xml配置如下:
<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
<many-to-one name="address" column="addressId" not-null="true"/>
</class>
<class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id>
</class>
annotation配置:
@Entity()
public class Flight implements Serializable {
@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
@JoinColumn(name="COMP_ID")
public Company getCompany() {
return company;
}
...
}
b).save保存数据有两种方式:先添加一的一方;先添加多的一方。最佳实践是添加一的一方。
不过,如果设置了not-null="true",就不能使用第二种方式了。而且,not-null是在建表的时候起作用!!
另外一点,如果使用了级联标签cascade="all|none|save-update|delete|all-delete-orphan|delet(6)e-orphan"时(多个以逗号隔开),会级联操作一的一方。
c).get/load many-to-one 默认使用懒加载,可以通过lazy="false"设置。如果先load一的一方,是没有办法获取到多的一方的数据的。
d).update没有实用价值,两张表只用id是相互关联的,其他没有任何关系。修改任意一张表另外一张表都是不可感知的。而id是不能修改的。
e).delete通过主键删除,只能删除多的一方。
2、one-to-one单向关联基于外键关联:在单向关联中,one-to-one和many-to-one基本一样,唯一不同的地方需要添加unique="true",其他没有区别,标签都是一样的。
a).hbm.xml配置如下
<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
<many-to-one name="address" column="addressId" unique="true" not-null="true"/>
</class>
<class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id>
</class>
annotation:
@Entity
public class Customer implements Serializable {
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="passport_fk")
public Passport getPassport() {
...
}
}
b).save和many-to-one也没有多大区别,只不过变成了一对一的关系。get/load、update、delete也和many-to-one一致。
3、one-to-one单向关联基于主键关联:
a).hbm.xml配置如下:
<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
</class>
<class name="Address">
<id name="id" column="personId">
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
<one-to-one name="person" constrained="true"/>
</class>
annotation
这种方式虽然API文档中给了例子,可是实践之后看不到两个实体之间有什么关联,两个实体可以单独保存数据,并不存在主键关联关系。通过hbm.xml方式是正确的,被维护关系的一端不能单独保存数据:
@Entity
public class Body {
@Id
public Long getId() { return id; }
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
public Heart getHeart() {
return heart;
}
...
}
b).通过主键关联,这种方式已经取消了!!!
4、one-to-many单向关联:这种方式是不推荐的。CRUD操作和many-to-one一样。
(A unidirectional one-to-many association on a foreign key is an unusual case, and is not recommended.
You should instead use a join table for this kind of association.)
<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
<set name="addresses">
<key column="personId" not-null="true"/>
<one-to-many class="Address"/>
</set>
</class>
<class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id>
</class>
annotation:
@Entity
public class Customer implements Serializable {
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name="CUST_ID")
public Set<Ticket> getTickets() {
...
}
@Entity
public class Ticket implements Serializable {
... //no bidir
}
=================================================================================
=================================================================================
1、one-to-many单向表连接(推荐使用表连接):
<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
<set name="addresses" table="PersonAddress">
<key column="personId"/>
<many-to-many column="addressId" unique="true" class="Address"/>
</set>
</class>
<class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id>
</class>
annotation:
@Entity
public class Trainer {
@OneToMany
@JoinTable(
name="TrainedMonkeys",
joinColumns = @JoinColumn( name="trainer_id"),
inverseJoinColumns = @JoinColumn( name="monkey_id")
)
public Set<Monkey> getTrainedMonkeys() {
...
}
@Entity
public class Monkey {
... //no bidir
}
2、many-to-one单向表连接;
<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
<join table="PersonAddress" optional="true">
<key column="personId" unique="true"/>
<many-to-one name="address" column="addressId" not-null="true"/>
</join>
</class>
<class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id>
</class>
annotation方式:
@Entity
public class Flight implements Serializable {
@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
@JoinTable(name="Flight_Company",
joinColumns = @JoinColumn(name="FLIGHT_ID"),
inverseJoinColumns = @JoinColumn(name="COMP_ID")
)
public Company getCompany() {
return company;
}
...
}
3、one-to-one单向表连接:基本不用,依旧和many-to-one差不多。
<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
<join table="PersonAddress" optional="true">
<key column="personId" unique="true"/>
<many-to-one name="address" column="addressId" not-null="true" unique="true"/>
</join>
</class>
<class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id
</class>
annotation:
public class Body {
@OneToOne
@JoinTable(name="bodyHeart",
joinColumns=@JoinColumn(name="bid"),
inverseJoinColumns=@JoinColumn(name="hid"))
public Heart getHeart() {
return heart;
}
}
4、many-to-many单向表连接:
<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
<set name="addresses" table="PersonAddress">
<key column="personId"/>
<many-to-many column="addressId" class="Address"/>
</set>
</class>
<class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id>
</class>
@Entity
public class Employer implements Serializable {
@ManyToMany(
targetEntity=org.hibernate.test.metadata.manytomany.Employee.class,
cascade={CascadeType.PERSIST, CascadeType.MERGE}
)
@JoinTable(
name="EMPLOYER_EMPLOYEE",
joinColumns=@JoinColumn(name="EMPER_ID"),
inverseJoinColumns=@JoinColumn(name="EMPEE_ID")
)
public Collection getEmployees() {
return employees;
}
...
}
@Entity
public class Employee implements Serializable {
.../no bidr
}
这些东西都是摘自hibernate的API文档,其实hibernate的东西都可以在hibernate的API找到,用法都有详细的介绍。
分享到:
相关推荐
这篇文章将深入解析`hibernate.hbm.xml`的结构和主要元素,帮助开发者更好地理解和运用。 `hibernate.hbm.xml`文件的结构通常如下所示: ```xml <?xml version="1.0" encoding='UTF-8'?> <!DOCTYPE hibernate-...
标题中的“利用Middlegen Hibernate3生成hbm.xml配置和java类”指的是使用Middlegen工具来自动化创建Hibernate3框架所需的映射文件(hbm.xml)和对应的Java实体类。这个过程是数据库对象到Java对象(O/R Mapping)的...
通过myeclipse自动生成Hibernate类文件和hbm.xml文件,链接数据库库自动生成
Hibernate 反向工程是指使用 Hibernate 工具将数据库表结构反向生成对应的 Entity 类和 hbm.xml 文件的过程。这种方法可以大大简化开发过程,提高开发效率。 二、 Hibernate 反向工程的步骤 1. 切换到 MyEclipse ...
Hibernate 在 MyEclipse 中根据表结构生成实体和 hbm.xml 文件 在 MyEclipse 中,我们可以使用 Hibernate 根据现有的数据库表结构生成实体和 hbm.xml 配置文件,这样可以避免手动编写 JPA 或 Hibernate 实体类。...
`Hibernate-tools`是Hibernate项目提供的一组实用工具,它包括了代码生成、反编译数据库模式到`hbm.xml`文件、JPA实体类生成等功能。在5.2.1版本中,这个工具集已经相当成熟,可以很好地支持各种定制需求。 1. **...
在hbm.xml文件中,我们可以使用`<many-to-one>`, `<one-to-many>`, 和 `<many-to-many>`标签来定义这些关联。下面将详细介绍这三个标签及其相关属性。 首先,我们来看`<many-to-one>`标签,它表示多对一的关系。...
`.hbm.xml`文件用于映射数据库表和Java类之间的关系,而`hibernate.cfg.xml`则是Hibernate的整体配置文件,包含了数据库连接、事务管理等核心设置。 ** Hibernate基础知识 ** Hibernate是一款流行的Java持久化框架...
hibernate.queries.hbm.xml这个文件需要放在jbpm*(版本).jar中。。的org.jbpm.db目录下,先删除以前的文件,然后,换上共享中这个。。大家可以用文件比较器看看,并没有改变以前的,只是新加了。。
请输入包的名称和映射文件需要放到的文件夹之后运行CreateTableXml里的main方法,就可以自动生成映射文件了。记着刷新文件夹,要不然是看不到的。 当然只是一些基础的属性。对于一些比较复杂,还是需要自己来修改的...
在 Hibernate 中,`hbm.xml` 文件是用于定义对象与数据库表之间映射的元数据文件。这篇文档将深入解析 `hbm.xml` 配置的各个方面。 ### 1. `hbm.xml` 文件结构 `hbm.xml` 文件的开头通常包含 XML 声明和 DTD 引用...
然后,我们可以使用 MyEclipse 的 Hibernate 工具来生成 POJO 类和映射文件 .hbm.xml。 Hibernate 是一个流行的持久层框架,它提供了许多功能来帮助开发者快速开发应用程序。在 MyEclipse 中,我们可以使用 ...
每个实体类对应一个`.hbm.xml`文件,其中包含了类名、属性名、字段类型、主键信息以及关联关系等配置。这些信息让Hibernate能够理解如何在数据库和Java对象之间进行自动的映射和转换。 例如,对于一个名为`User`的...
hbm.xml文件中的name名字与实体类中不符合.
在弹出的对话框中,指定生成实体类和hbm.xml文件的包名,并确保勾选`Hibernate mapping file`和`Java Data Object`两个选项,这样MyEclipse就会为我们生成所需的文件。 如果在生成过程中遇到问题,例如缺少...
在开发过程中,为了减少手动编写实体类(Entity)和对应的hbm.xml配置文件的工作量,Hibernate提供了一个逆向工程工具,可以基于现有数据库结构自动生成这些代码。 实体类是Java对象,它们代表数据库中的表,而hbm....
这个属性用于指定类路径下具体的Hibernate映射文件(.hbm.xml)。例如,如果我们有一个名为`petclinic.hbm.xml`的映射文件,我们可以这样配置: ```xml <value>petclinic.hbm.xml ``` 这种方式只能处理单个...
- **映射文件内容**:`hbm.xml` 文件定义了实体类和数据库表之间的映射规则,包括字段映射、主键设置、关联关系等。 - **Session 对象**:代表数据库会话,用于执行 CRUD 操作。它提供了一种上下文,可以在其中加载...
本文将详细介绍如何利用Hibernate逆向生成实体类的方法,包括通过注解映射以及hbm.xml文件映射两种方式。 #### 一、环境准备与配置 1. **安装并配置MyEclipse**: - 安装MyEclipse,并确保已安装Hibernate插件。 ...
MyEclipse中自动生成Hibernate的POJO、DAO和hbm.xml文件 MyEclipse是一款功能强大且流行的集成开发环境(IDE),它提供了许多实用的功能来帮助开发者快速构建和维护项目。其中,MyEclipse提供了对Hibernate的支持,...