1. 程式人生 > >Hibernate的一對多關聯關係(單向和雙向)

Hibernate的一對多關聯關係(單向和雙向)

  • 雙向關聯:主表中有從表的屬性,從表中有主表的屬性。
  • 單向關聯:主表中只有從表的屬性。
  1.   
  2.    

 

 

建立兩個類檔案:Person,card

package com.zking.entity;

import java.util.UUID;

public class Card {
	private String pid;
	private int cno;
	private String cid = String.valueOf(UUID.randomUUID());
    private Person person;  
	
	public Card() {
		super();
		// TODO Auto-generated constructor stub
	}

	public String getPid() {
		return pid;
	}

	public void setPid(String pid) {
		this.pid = pid;
	}

	public int getCno() {
		return cno;
	}

	public void setCno(int cno) {
		this.cno = cno;
	}

	public String getCid() {
		return cid;
	}

	public void setCid(String cid) {
		this.cid = cid;
	}

	
	
	public Person getPerson() {
		return person;
	}

	public void setPerson(Person person) {
		this.person = person;
	}

	@Override
	public String toString() {
		return "Card [pid=" + pid + ", cno=" + cno + ", cid=" + cid + ", person=" + person + "]";
	}


	 
}







package com.zking.entity;

public class Person {
	private String pid; 
	private String pname;
	private Card card;

	public Person() {
		super();
		// TODO Auto-generated constructor stub
	}

	
	
	public String getPid() {
		return pid;
	}



	public void setPid(String pid) {
		this.pid = pid;
	}



	 

	public String getPname() {
		return pname;
	}

	public void setPname(String pname) {
		this.pname = pname;
	}

	@Override
	public String toString() {
		return "pname=" + pname + "]";
	}

	public Card getCard() {
		return card;
	}

	public void setCard(Card card) {
		this.card = card;
	}

}


hibernate.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
		"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.password">sasa</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/t204?characterEncoding=utf-8</property>
		<property name="hibernate.connection.username">root</property>

		<property name="show_sql">true</property>
		<property name="format_sql">true</property>

		<mapping resource="com/zking/entity/Person.hbm.xml" />
		<mapping resource="com/zking/entity/Card.hbm.xml" />
	</session-factory>
</hibernate-configuration>

生成hibernate對映檔案:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-9-7 16:50:12 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
	<class name="com.zking.entity.Card" table="CARD">
		<id name="pid" type="java.lang.String">
			<column name="pid" />
			<generator class="foreign">
				<param name="property">person</param>
			</generator>
		</id>
		
		<property name="cid" type="java.lang.String">
			<column name="cid" />
		</property>
		
		 
		<property name="cno" type="int">
			<column name="cno" />
		</property>
		<one-to-one name="person" class="com.zking.entity.Person"></one-to-one>
	</class>
</hibernate-mapping>

Person.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-9-7 16:50:12 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
	<class name="com.zking.entity.Person" table="PERSON">
		<id name="pid" type="java.lang.String">
			<column name="pid" />
			<generator class="guid" />
		</id>
		<property name="pname" type="java.lang.String">
			<column name="PNAME" />
		</property>
		<!-- cascade="save-update" cascade="delete" -->
		<one-to-one name="card" class="com.zking.entity.Card" cascade="delete"></one-to-one>
	</class>
</hibernate-mapping>

hibernate04.java

 

package hibernate04;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import com.zking.entity.Card;
import com.zking.entity.Person;

public class OneToOne {

	@Test
	public void OneToOneTemp() {
		Configuration configuration = new Configuration().configure();
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		Session session = sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();

		Person p1 = new Person();

		p1.setPid("3019933a-b289-11e8-a29d-54ee75bbb0cd");
		p1.setPname("zs");

		Card c1 = new Card();
		c1.setPid("3019933a-b289-11e8-a29d-54ee75bbb0cd");
		c1.setCno(1234);

		System.out.println(c1);
		c1.setPerson(p1);
		p1.setCard(c1);

		// session.save(p1);
		session.delete(p1);

		transaction.commit();
		session.close();
	}
}