Hibernate 의 단 방향 다 대 1
7572 단어 Hibernate
지금 몇 시 를 정리 하면 내 가 아 는 잘못된 부분:
1. 데이터 베 이 스 를 만 들 때 외부 키 를 지정 하지 않 아 도 됩 니 다. Hibernate 는 외부 키 와 연 결 된 표 두 장 을 xml 로 표시 할 수 있 습 니 다.
2. Eclipse 의 자동 생 성 된 *. 자바 류 와 *. hbm. xml (데이터베이스 시트 에 비 친 클래스 와 대응 하 는 xml 파일) 에 지나치게 의존 하지 마 십시오. 데이터베이스 시트 에 있 는 그 의미 의 외 키 (표를 다시 만 들 필요 가 없 을 때 지정) 는 int 형 이지 만 자동 으로 생 성 된 자바 파일 에서 도 Integer 형 이 자동 으로 생 성 됩 니 다.하지만 스스로 의존 하 는 유형 으로 바 꿔 야 한 다 는 점 을 명심 하 라.
3. < many - to - one > 의 class 는 의존 류 의 전체 경 로 를 써 야 합 니 다.
4, 오류 발생:
could not initialize proxy - no Session 세 션 이 닫 혔 기 때 문 입 니 다.
지금 코드 를 올 려 보 세 요.
1. 데이터베이스 구축: (외부 키 를 지정 할 필요 가 없습니다)
2, 맵 클래스 자동 생 성:
Room:
package com.wjy.models;
// Generated 2014-1-21 10:36:04 by Hibernate Tools 3.4.0.CR1
/**
* Room generated by hbm2java
*/
public class Room implements java.io.Serializable {
private Integer id;
private String address;
public Room() {
}
public Room(String address) {
this.address = address;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAddress() {
return this.address;
}
public void setAddress(String address) {
this.address = address;
}
}
User:
package com.wjy.models;
// Generated 2014-1-21 10:36:04 by Hibernate Tools 3.4.0.CR1
/**
* User generated by hbm2java
*/
public class User implements java.io.Serializable {
private Integer id;
private String name;
private Room room; // , Integer, Room 。
public User() {
}
public User(String name) {
this.name = name;
}
public User(String name, Room room) {
this.name = name;
this.room = room;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Room getRoom() {
return room;
}
public void setRoom(Room room) {
this.room = room;
}
}
3, 2 와 동시에 생 성 된 *.hbm.xml:
Room:
<?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 2014-1-21 10:36:04 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.wjy.models.Room" table="room" catalog="multone">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="address" type="string">
<column name="address" length="100" not-null="true" />
</property>
</class>
</hibernate-mapping>
User:
<?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 2014-1-21 10:36:04 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.wjy.models.User" table="user" catalog="multone">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="name" type="string">
<column name="name" length="100" not-null="true" />
</property>
<many-to-one name="room" column="room_id" class="com.wjy.models.Room" cascade="all" outer-join="true">
</many-to-one> : , 。room *.java ,room_id 。
</class>
</hibernate-mapping>
4, hibenate. hbm. xml 에 맵 추가:
<mapping class="com.wjy.models.Room" resource="com/wjy/models/Room.hbm.xml"/>
<mapping class="com.wjy.models.User" resource="com/wjy/models/User.hbm.xml"/>
5. 이제 테스트 코드 를 볼 수 있 습 니 다.
public void addUsers(){
// user :Wjy Yhw, 。 ,room 。
SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
// session
Session session=sessionFactory.openSession();
//
Transaction transaction=session.beginTransaction();
Room room1 = new Room();
room1.setAddress("96#");
User user1 = new User();
user1.setName("Wjy");
user1.setRoom(room1);////////////////////
User user2 = new User();
user2.setName("Yhw");
user2.setRoom(room1);////////////////////
//
session.save(user1);
session.save(user2);
//session.saveOrUpdate(model);
transaction.commit();
session.close();
}
데이터베이스 변화 보기:
6. 지금까지 다 대 일 맵 을 실 현 했 고 데이터베이스 시트 에서 지정 하지 않 아 도 유연 합 니 다.
public void getRoom(){
SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
// session
Session session=sessionFactory.openSession();
//
Transaction transaction=session.beginTransaction();
String hql="from User where name='Yhw'";
Query userList=session.createQuery(hql);
List list=userList.list();
//User user = (User) session.load(User.class, new Integer(1));
//transaction.commit();
Iterator iterator=list.iterator();
User user=(User)iterator.next();
System.out.println(user.getName()+" in "+user.getRoom().getAddress());
//System.out.println(user.getName()+" in "+user.getRoom().getAddress());
session.close();
}
상기 프로그램 은 User 를 조회 하 는 두 가지 방식 을 보 여 주 었 고 주석 이 달 린 것 은 두 번 째 방법 이다.
나 는 나의 소스 코드 를 모두 가 참고 하도록 올 렸 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JPA] 단방향 연관관계테이블과 컬럼은 결국 엔티티와 필드와 그대로 매핑하기 때문에 매핑방법만 알고 있다면 어렵지 않지만, DB와 JPA는 테이블간의 관계를 표현하는 패러다임에서 큰 차이가 있기 때문에 나 역시 JPA를 처음 접하고 이 부...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.