【问题标题】:one to many unidirectional hibernate mapping doesn't save the child table一对多单向休眠映射不保存子表
【发布时间】:2011-12-10 18:54:52
【问题描述】:

我有两个名为PersonAddress 的表。我使用注释将这些表一对多映射到休眠状态。

然后在我的父实体Person 中创建一个Set<Address> 来保存子类。之后,我创建了一组地址并设置为 Person 实体,并设置了 Person 自己的值。

我的问题是当我保存父实体时,子实体没有保存在数据库中。

这是我的代码:

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;

Address.java

@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:

   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 );
    }

此人正在我的表中添加,但地址未保存。为什么?

双向是可能的,但单向是我的问题

【问题讨论】:

    标签: hibernate annotations one-to-many


    【解决方案1】:

    personId 列被映射两次:一次用于保存地址人的外键,使用JoinColumn 注释,一次作为地址中的常规int 列。

    从地址中删除 personId 字段。如果您想从地址访问人员 ID,请将关联映射为双向 OneToMany/ManyToOne 关联。

    【讨论】:

    • 我从地址中删除了 personId,然后重复上述过程
    猜你喜欢
    • 2013-05-23
    • 2012-06-22
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多