many-to-one是多对一的关系,如用户和组的关系,一个用户只能属于一个组,一个组可以有多个用户。用户是多端,组是一端。
当然,如果一个用户可能属于多个组那就是多对多的关系了。
public class Group { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name=" Group" table="t_group"> <id name="id"> <generator class="native"/> </id> <property name="name"/> </class> </hibernate-mapping>
public class User { private int id; private String name; private Group group; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Group getGroup() { return group; } public void setGroup(Group group) { this.group = group; } }
User类中是用Group类来关联组信息的。在数据库中其实是用户表用groupid做外键关联组表。
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name=" User" table="t_user"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <many-to-one name="group" column="groupid"/> </class> </hibernate-mapping>
<many-to-one name=”group” column=”groupid”/>解析:
group:User类中的group属性,为Group类型。
groupid:关联group属性需要的外键列名。
User通过group属性找到Group类对应的映射文件,其中有要关联表的信息。
lazy (可选 – 默认为 proxy): 默认情况下,单点关联是经过代理的。lazy=”no-proxy”指定此属性应该在实例变量第一次被访问时应该延迟抓取(fetche lazily)(需要运行时字节码的增强)。 lazy=”false”指定此关联总是被预先抓取。
not-found (可选 – 默认为 exception): 指定外键引用的数据不存在时如何处理: ignore会将行数据不存在视为一个空(null)关联。