2011-10-19 4 views
3

PersonAddress이라는 두 개의 테이블이있다. 이 테이블들은 을 하나의 many to에 매핑하고 주석을 사용하여 hibernate를 사용했다.하나의 많은 단방향 hibernate 매핑은 자식 테이블을 저장하지 않는다

다음 부모 엔티티 Person 나는 하위 클래스를 보유하기 위해 Set<Address>을 만듭니다. 그런 다음 주소 세트를 만들고 Person 엔티티로 설정하고 Person 고유 값을 설정합니다.

내 문제는 부모 엔티티를 저장할 때 자식이 DB에 저장되지 않는다는 것입니다.

public Person addNewPerson() { 
    Person per = new Person(); 
    per.setName("aaaa person"); 
    Set<Address> addressSet = new HashSet<Address>(); 
    for(int i = 0; i<=3;i++){ 
     Address ad = new Address(); 
     ad.setAddress("aaa "+i); 
     addressSet.add(ad); 

    } 
    per.setAddresses(addressSet); 
    getHibernateTemplate().save(per); 
    } 
:

@Entity 
@Table(name = "ADDRESS") 
public class Address { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "addressId") 
    private int id; 
    @Column(name = "address") 
    private String address; 
    @Column(name="personId") 
    private int personid; 

내 DAO Address.java

Person.java

@Entity 
@Table(name="PERSON") 
public class Person { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name="personId") 
    private int id; 
    @Column(name="personName") 
    private String name; 
    @OneToMany(cascade =CascadeType.ALL,fetch = FetchType.EAGER) 
    @JoinColumn(name="personId") 
    private Set <Address> addresses; 

: 여기

내 코드입니다

사람이 내 테이블에 추가하고 있지만 주소는 저장되지 않습니다. 왜?

양방향이 가능하지만, 단방향 내 personId 열 두 번 매핑되는 문제

답변

3

입니다 : 일반 int로 한 번 JoinColumn 주석을 사용하여 주소의 사람에게 외국 키를 누른 상태에서 한 번, 그리고 주소의 열.

주소에서 personId 필드를 제거하십시오. 주소에서 사람 ID에 액세스하려면 양방향 OneToMany/ManyToOne 연관으로 연결을 매핑하십시오.

+0

주소에서 personId를 제거한 다음 위에서 언급 한 절차를 반복하십시오 – jaleel

+0

하나의 응용 프로그램을 제안 할 수 있습니까? – jaleel

+0

미안 .. 괜찮아요 .. – jaleel

관련 문제