Hibernate 관련 맵 - one to many 외부 키 단 방향 연결
8490 단어 Hibernate
테스트 를 편리 하 게 하기 위해 기 존의 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, 광동성 심 천시
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JPA] 즉시로딩(EAGER)과 지연로딩(LAZY) (왜 LAZY 로딩을 써야할까?) (1)Proxy는 이 글의 주제인 즉시로딩과 지연로딩을 구현하는데 중요한 개념인데, 일단 원리는 미뤄두고 즉시로딩과 지연로딩이 무엇인지에 대해 먼저 알아보자. 눈 여겨 볼 곳은 'fetch = FetchType.EAGER...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.