ITEEDU

Hibernate-many-to-one映射

many-to-one

many-to-one是多对一的关系,如用户和组的关系,一个用户只能属于一个组,一个组可以有多个用户。用户是多端,组是一端。

当然,如果一个用户可能属于多个组那就是多对多的关系了。

Group类:

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;
	}
}

 

Group映射文件:

<?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>

 

User户类:

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做外键关联组表。

User映射文件:

<?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)关联。