Hibernate 관련 맵 - one to many 외부 키 단 방향 연결

8490 단어 Hibernate
다음은 1 쌍 의 다 중 단일 키 와 연 결 된 인 스 턴 스 입 니 다. 마찬가지 로 person 과 address 를 예 로 들 면.
 
 
테스트 를 편리 하 게 하기 위해 기 존의 Hibernate 프레임 워 크 에 hbm. xml 파일 두 개 를 만 듭 니 다.
하 나 는 AddressOne_to_Many. hbm. xml, 다른 하 나 는 PersonOne_to_Many.hbm.xml。
그리고 두 개의 자바 빈 을 만 드 는 것 은 각각 address 이다.One_to_many 와 PersonOne_to_Many
 
 
Person_One_to_많은 구체 적 인 내용 은 다음 과 같다.
/**
 * 1  ,    
 * @author Administrator
 *
 */
public class Person_One_to_Many implements Serializable{
	
	private static final long serialVersionUID = -6313867775683964530L;
	private Integer id;
	private String name;
	private Integer age;
	
	//   ,     ;
	private Set<Address_One_to_Many> setAddress = new HashSet<Address_One_to_Many>();
      
                //getter   setter     	
}

 
 
Address_One_to_많은 구체 적 인 코드 는 다음 과 같 습 니 다.
/**
 * 
 *       ;
 * @author Administrator
 *
 */
public class Address_One_to_Many implements Serializable{
	
	private static final long serialVersionUID = 3635140598485086087L;
	private Integer addressID;
	private String addressDetail;
               
                //getter   setter    .
}

 
 
다음은 Mapping 맵 문 서 를 설정 하 는 것 입 니 다.
Person_One_to_Many. hbm. xml 구체 적 인 코드 는 다음 과 같 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="pack.java.model">
	<class name="Person_One_to_Many" table="ZHT_Person_One_To_Many">
		<id name="id" column="ID" type="java.lang.Integer">
			<!-- mySql   id    . -->
			<generator class="identity">
			</generator>
		</id>
		
		<!-- PERSON_ONE_TO_MANY      -->
		<property name="name" column="NAME" type="java.lang.String"></property>
		<property name="age" column="AGE" type="java.lang.Integer"></property>
		
		<!-- 
			  Address  set  ,inverse = false      ; lazy=false       .
			table=ADDRESS_ONE_TO_MANY       ADDRESSS   ;      ;
			cascade=all          ;
		-->
		<set name="setAddress" inverse="false" lazy="false" table="ADDRESS_ONE_TO_MANY" cascade="all">
			<!--         ,        ;-->
			<key column="id" not-null="false"></key>
			<!-- 1         ,  class    Address -->
			<one-to-many class="Address_One_to_Many"/>
		</set>
	</class>
</hibernate-mapping>

 
 
Address_One_to_Many.hbm.xml:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="pack.java.model">
 <class name="Address_One_to_Many" table="ADDRESS_ONE_TO_MANY">
  <id column="ADDRESS_ID" name="addressID" type="java.lang.Integer">
   <generator class="identity"/>
  </id>
  
  <!-- ADDRESS_ONE_TO_MANY     ; -->
  <property  lazy="false" name="addressDetail" column="ADDRESS_DETAIL" not-null="true"/>
 </class>
</hibernate-mapping>

 
 
설정 이 끝 난 후, Hibernate. cfg. xml 에 방금 새로 만 든 xxx. hbm. xml 파일 의 맵 주 소 를 추가 하 는 것 을 기억 하 십시오.
예 를 들 면:

 
 
마지막 으로 테스트 클래스 를 만들어 서 방금 설정 한 1 쌍 이상 의 맵 관 계 를 테스트 합 니 다.
package pack.java.test;
import java.io.Serializable;
import java.util.Set;
import org.hibernate.Session;
import pack.java.hibernate.HibernateSessionFactory;
import pack.java.model.Address_One_to_Many;
import pack.java.model.Person_One_to_Many;
/**
 * 
 * Hibernate    ;          ;
 * @author ZhouHaiTao
 *
 */
public class HibernateDemoOneToMany {
	public static void main(String[] args) {
		HibernateDemoOneToMany hibernateDemoOneToMany = new HibernateDemoOneToMany();
		//    ;
		hibernateDemoOneToMany.saveAddress();
		
		//    ;
		hibernateDemoOneToMany.savePerson();
		
		//  Person id  person;
		hibernateDemoOneToMany.loadPersonByID(1);
	}
	
	/**
	 *   Address  ;
	 */
	private void saveAddress(){
		Session session = getSession();
		Address_One_to_Many address1 = new Address_One_to_Many();
		address1.setAddressDetail("      ");
	
		Address_One_to_Many address2 = new Address_One_to_Many();
		address2.setAddressDetail("      ");
		
		Address_One_to_Many address3 = new Address_One_to_Many();
		address3.setAddressDetail("      ");
		
		//    ;
		session.beginTransaction().begin();
		//      ;
		session.save(address1);
		session.save(address2);
		session.save(address3);
		//    ;
		session.beginTransaction().commit();
		
		//  session;
		closeSession(session);
	}
	
	/**
	 *   Person,   Person      ;
	 */
	private void savePerson(){
		//  session;
		Session session = getSession();
		Person_One_to_Many person1 = new Person_One_to_Many("  ",23);
		Person_One_to_Many person2 = new Person_One_to_Many("  ",23);
		
		Address_One_to_Many address1 = new Address_One_to_Many();
		address1.setAddressDetail("      ");
	
		Address_One_to_Many address2 = new Address_One_to_Many();
		address2.setAddressDetail("      ");
		
		Address_One_to_Many address3 = new Address_One_to_Many();
		address3.setAddressDetail("      ");
		
		session.beginTransaction().begin();
		
		//   person1        ;
		person1.getSetAddress().add(address1);
		person1.getSetAddress().add(address2);
		
		// person2  ,      ;
		person2.getSetAddress().add(address3);
		session.save(person1);
		session.save(person2);
		session.beginTransaction().commit();
		
		//  session;
		closeSession(session);
	}
	
	
	/**
	 *   person id   ,person  ,    ;
	 * @param id
	 */
	private void loadPersonByID(Serializable id){
		Session session = getSession();
		Person_One_to_Many personOneToMany = (Person_One_to_Many) session.load(Person_One_to_Many.class, id);
		System.out.println("   Person      :");
		System.out.println(personOneToMany.getId()+","+personOneToMany.getName()+","+personOneToMany.getAge());
		Set<Address_One_to_Many> addressOneToManies = personOneToMany.getSetAddress();
		
		System.out.println("
Address :"); for(Address_One_to_Many addressOneToMany : addressOneToManies){ System.out.println(addressOneToMany.getAddressID()+","+addressOneToMany.getAddressDetail()); } closeSession(session); } /** * session; * @return */ private static Session getSession(){ return HibernateSessionFactory.getSession(); } /** * session; * @return */ private static void closeSession(Session session){ session.close(); } }

 
 
테스트 후 MySql 에서 데이터 가 정상적으로 삽입 되 었 는 지 확인 할 수 있 습 니 다.
 
다음은 콘 솔 에서 출력 한 정보 입 니 다. 데이터 베 이 스 를 성공 적 으로 삽입 한 것 을 의미 합 니 다.
 
Person 의 속성 정보 출력: 1, 주해 도, 23
address 의 정보 출력: 5, 호남성 주주 시 4, 광동성 심 천시

좋은 웹페이지 즐겨찾기