hibernate基于主键的一对一映射(单双向)

单向的:
javabean如下:
/**
 *
 * 单向基于主键的一对一 主控端   对象模型中的身份证
 */
public class IDCard {

	private Integer id;
	private String no;
	
	//主控端引用被控端的对象
	
	private Citizen citizen; //引用citizen表的主键
	
	public IDCard(){
		
	}

	/**
	 * @return the id
	 */
	public Integer getId() {
		return id;
	}

	/**
	 * @param id the id to set
	 */
	public void setId(Integer id) {
		this.id = id;
	}

	/**
	 * @return the no
	 */
	public String getNo() {
		return no;
	}

	/**
	 * @param no the no to set
	 */
	public void setNo(String no) {
		this.no = no;
	}

	/**
	 * @return the citizen
	 */
	public Citizen getCitizen() {
		return citizen;
	}

	/**
	 * @param citizen the citizen to set
	 */
	public void setCitizen(Citizen citizen) {
		this.citizen = citizen;
	}

	
}
</pre><pre code_snippet_id="1632008" snippet_file_name="blog_20160401_4_9620953" name="code" class="java"><pre name="code" class="java">/**
 * 
 * 单向基于主键的一对一  被控端 公民
 */
public class Citizen {

	private int id;
	private String name;
	
	public Citizen(){
		
	}




	/**
	 * @return the id
	 */
	public int getId() {
		return id;
	}




	/**
	 * @param id the id to set
	 */
	public void setId(int id) {
		this.id = id;
	}




	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}




	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}

	
	
	
}


 
 
映射文件:
<pre name="code" class="html"><?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="IDCard" table="idcard_tab1">
		<!-- 生成对象唯一的OID标示符 -->
		<id name="id">
			<generator class="foreign">
				<param name="property">citizen</param>
			</generator>
		</id>
		<property name="no"/>
		<!-- 
			constrained 告诉当前主键,你的值时采用另个表中的主键的值
			当前主键对于有关系的另一个表来说就是外键。
		 -->
		<one-to-one name="citizen" constrained="true"></one-to-one>
	</class>

</hibernate-mapping>
</pre><pre code_snippet_id="1632008" snippet_file_name="blog_20160401_8_3655162" name="code" class="html"><?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="Citizen" table="citizen_tab1">
		<!-- 生成对象唯一的OID标示符 -->
		<id name="id" column="id" type="integer">
			<generator class="native"/>
		</id>
		<property name="name"/>
		 
	</class>

</hibernate-mapping>

生成的数据库表:

hibernate基于主键的一对一映射(单双向)_第1张图片


双向主键一对一:

使用双向,先保存谁都可以,因为互相都知道彼此是存在的

javabean:

/**
 * @author 
 * 双向基于主键的一对一  主控端  对象模型中的身份证
 */
public class IDCard {

	private Integer id;
	private String no;
	
	//主控端引用被控端的对象
	
	private Citizen citizen;
	
	public IDCard(){
		
	}

	/**
	 * @return the id
	 */
	public Integer getId() {
		return id;
	}

	/**
	 * @param id the id to set
	 */
	public void setId(Integer id) {
		this.id = id;
	}

	/**
	 * @return the no
	 */
	public String getNo() {
		return no;
	}

	/**
	 * @param no the no to set
	 */
	public void setNo(String no) {
		this.no = no;
	}

	/**
	 * @return the citizen
	 */
	public Citizen getCitizen() {
		return citizen;
	}

	/**
	 * @param citizen the citizen to set
	 */
	public void setCitizen(Citizen citizen) {
		this.citizen = citizen;
	}

	
}


/**
 * @author 
 * 双向的基于主键的一对一  被控端 公民
 */
public class Citizen {

	private int id;
	private String name;
	
	private IDCard idCard;

	
	public Citizen(){
		
	}




	/**
	 * @return the id
	 */
	public int getId() {
		return id;
	}




	/**
	 * @param id the id to set
	 */
	public void setId(int id) {
		this.id = id;
	}




	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}




	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}




	public void setIdCard(IDCard idCard) {
		this.idCard = idCard;
	}




	public IDCard getIdCard() {
		return idCard;
	}

	
	
	
}

映射文件:

就是主控端依赖被控端生成的id

<?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="com.entity.Citizen" table="citizen_tab2">
		<!-- 生成对象唯一的OID标示符 -->
		<id name="id" column="id" type="integer">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<!-- 建立一对一关系 -->
		 <one-to-one name="idCard" />
	</class>

</hibernate-mapping>


<?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="com.entity.IDCard" table="idcard_tab2">
		<!-- 生成对象唯一的OID标示符 -->
		<id name="id">
			<generator class="foreign">
			<param name="property">citizen</param>
			</generator>
		</id>
		<property name="no"/>
		<!-- 
			constrained 告诉当前主键,你的值时采用另个表中的主键的值
			当前主键对于有关系的另一个表来说就是外键。
		 -->
		<one-to-one name="citizen" constrained="true"></one-to-one>
	</class>

</hibernate-mapping>
建立的数据库表结构:

hibernate基于主键的一对一映射(单双向)_第2张图片

hibernate基于主键的一对一映射(单双向)_第3张图片















你可能感兴趣的:(hibernate基于主键的一对一映射(单双向))