关联映射:将关联关系(在对象模型中就是一个或多个引用)映射到数据库中
关系属性:在内存中建立两个对象之间的关系
双向关系:在关系对象中都能找到对方
单项关系:只在关系的一方能找到另一方
实体类设计原则:
1、实现无参构造函数(Hibernate要调用)
2、提供一个标识(用于唯一标识该对象,映射数据库主键)
3、建议不用final修饰实体类(Hibernate实现延迟加载使用CGLIB代理时会继承实体类)
4、建议为实体类属性生成getter、setter方法(Hibernate默认属性访问器)
若实体类名或实体类中属性名与数据库关键字重复,将会出现问题;可考虑采用table属性和column属性对其进行重命名
<?xml version="1.0"encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="org.app.model" auto-import="true"> <!-- 实体类映射成表 --> <class name="User" table="t_user"dynamic-insert="false" dynamic-update="false"> <!-- 映射主键id --> <idname="id" column="user_id"access="" length=""type=""> <!-- <generatorclass="increment" /> --> <generatorclass="sequence"> <paramname="sequence">user_seq</param> </generator> </id> <!-- 映射普通属性 --> <!-- 普通属性(非集合、自定义类、数据等)映射成表字段 --> <propertyname="name" column="user_name"length="30" type="string" unique="false" not-null="true"access="field" insert="true"update="true" /> <propertyname="password" /> <propertyname="createTime" /> <propertyname="expireTime" type="date" /> <!-- 映射关系属性 --> </class> </hibernate-mapping>
public class Company { private Integer id; private String name; private Address address; // setter、getter方法 // 在内存中建立对象关系 public void addRelation(Address address) { this.address = address; address.setCompany(this); } // 在内存中解除对象的关系 public void deleteRelation(Address address) { this.address = null; address.setCompany(null); } }
时间: 2024-11-03 00:56:48