Hibernate 는 one - to - many 에서 부자 관계 의 자동 삽입 을 실현 합 니 다.
주의: 데이터베이스 시트 를 디자인 할 때 서브 시트 에 물리 적 외 키 관련 부모 표를 설정 하 는 것 은 필수 적 인 것 이 아니 라 현재 의 데이터 베이스 디자인 은 논리 적 외 키 관계 에 편중 되 어 후기 작업 에 큰 편 의 를 가 져 다 줄 수 있 습 니 다.
관광지 와 입장권 유형의 POJO 와 hbm 코드
관광지 POJO
public class TbScenery {
private String id;
private String jdname;
private List<TbSceneryTickets> tbSceneryTickets;
//getter setter....
}
관광지 hbm
<?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="TbScenery" table="TB_SCENERY">
<id name="id" type="java.lang.String">
<column name="ID" length="32" />
<generator class="sequence" >
<param name="sequence">SEQ_SCENERY</param>
</generator>
</id>
<property name="jdname" type="java.lang.String">
<column name="JDNAME" length="500" />
</property>
<!-- Parent inverse="true" cascade="all"-->
<list name="tbSceneryTickets" lazy="false" inverse="true" cascade="all">
<key><column name="SCENERY_ID" /></key>
<index column="ID" type="java.lang.String" />
<one-to-many class="TbSceneryTickets" />
</list>
</class>
</hibernate-mapping>
입장권 POJO:
public class TbSceneryTickets implements java.io.Serializable {
private String id;
private String sceneryId;//
private String typeName;
//getter setter....
}
입장권
<hibernate-mapping>
<class name="TbSceneryTickets" table="TB_SCENERY_TICKETS" lazy="false">
<id name="id" type="java.lang.String">
<column name="ID" length="32" />
<generator class="sequence" >
<param name="sequence">SEQ_SCENERY_TICKET</param>
</generator>
</id>
<property name="sceneryId" type="java.lang.String" column="SCENERY_ID"
length="32" />
<property name="typeName" type="java.lang.String" column="TYPE_NAME"
length="100" />
</class>
</hibernate-mapping>
테스트 후 업 데 이 트 를 하고 작업 을 삭제 할 때 아무런 문제 가 없 음 을 발 견 했 습 니 다. 다음 과 같은 삽입 작업 을 할 때 삽입 에 실패 한 것 을 발견 할 수 있 습 니 다.
public void test() {
TbScenery scenery = new TbScenery();
scenery.setJdname(" ");
// id id , 。
// sceneryId
TbSceneryTickets ticket1 = new TbSceneryTickets();
ticket1.setTypeName(" ");
TbSceneryTickets ticket2 = new TbSceneryTickets();
ticket1.setTypeName(" ");
List<TbSceneryTickets> tbSceneryTickets = new ArrayList<TbSceneryTickets>();
tbSceneryTickets.add(ticket1);
tbSceneryTickets.add(ticket2);
scenery.setTbSceneryTickets(tbSceneryTickets);
dao.saveOrUpdate(scenery);
}
이 유 는 '관광지' 를 새로 만 들 고 '티켓 유형' 이 n 개 있 을 때 '관광지' 대상 을 한꺼번에 제출 할 수 없습니다. tbScenery Tickets 가 scenary 에 값 을 부여 하기 전에 먼저 scenary 를 저장 해 야 합 니 다. scenary 는 new 가 나 온 대상 이기 때문에 오래 지속 되 는 대상 이 아니 라 tbScenery Tickets 에 값 을 부여 해 야 합 니 다.Hibernate 는 상 태 를 검사 할 수 없습니다.사실 쉽게 말 하면 scenery (관광지 대상) 자신 에 게 id 표지 가 없다 는 것 이다. 그러면 모든 TbScenery Tickets 대상 (입장권 유형 대상) 은 외부 키 가 무엇 인지 어떻게 알 수 있 습 니까?
one - to - many 에 대해 서 는 일반적으로 다음 과 같은 조작 을 합 니 다.
public void test() {
TbScenery scenery = new TbScenery();
scenery.setJdname(" ");
// ,scenery , debug
dao.saveOrUpdate(scenery);
TbSceneryTickets ticket1 = new TbSceneryTickets();
ticket1.setTypeName(" ");
// , ticket
ticket1.setSceneryId(scenery.getId());
TbSceneryTickets ticket2 = new TbSceneryTickets();
ticket1.setTypeName(" ");
ticket2.setSceneryId(scenery.getId())
List<TbSceneryTickets> tbSceneryTickets = new ArrayList<TbSceneryTickets>();
tbSceneryTickets.add(ticket1);
tbSceneryTickets.add(ticket2);
scenery.setTbSceneryTickets(tbSceneryTickets);
dao.saveOrUpdate(scenery);
}
프로젝트 에서 이 원 리 를 사용 하여 원 - to - many 의 직렬 연결 작업 을 쉽게 완성 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.