Hibernate 의 단 방향 다 대 1

7572 단어 Hibernate
최근 하 이 버 네 이 트 를 연구 해 데이터베이스 테이블 항목 을 하나 더 맞 추 는 예 를 시도 한 결과 실패했다.마지막 으로 인터넷 에서 블 로 그 를 찾 아 보 니 문득 깨 달 았 다.나 를 일 깨 워 준 이 블 로그 주소:http://blog.csdn.net/yinbodotcc/article/details/1505445
       지금 몇 시 를 정리 하면 내 가 아 는 잘못된 부분:
                               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 를 조회 하 는 두 가지 방식 을 보 여 주 었 고 주석 이 달 린 것 은 두 번 째 방법 이다.
나 는 나의 소스 코드 를 모두 가 참고 하도록 올 렸 다.

좋은 웹페이지 즐겨찾기