使用mappedBy时,为什么这种一对多映射失败?

时间:2013-03-13 15:29:57

标签: java hibernate jpa orm

@Entity
public class Person implements Serializable{

    @Id
    @GeneratedValue
    private int id;
    private String name;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "person")
    private List<Car> cars;

        //getters and setters
}


@Entity
public class Car implements Serializable{
    @Id
    @GeneratedValue
    private int id;
    private String name;

    @ManyToOne
    @JoinColumn(name = "person_id")
    private Person person;

        // getters and setters
}

而且..我这样用它..

       Person per = new Person();
    per.setName("some");

    Car car1 = new Car();
    car1.setName("Ford");

    Car car2 = new Car();
    car2.setName("WagonR");

    //s.save(car1);
    //s.save(car2);
    per.setCars(new ArrayList<Car>());
    per.getCars().add(car1);
    per.getCars().add(car2);

    s.save(per);

现在..表Car有一列person_id,但它显示了两辆车的null ..我在这里做错了什么?正确填写表Person。如果我从mappedBy表中移除“Person”,而是在此处包含@JoinColumn ...那么它可以正常工作。

2 个答案:

答案 0 :(得分:1)

尝试拨打car.setPerson(per)

答案 1 :(得分:1)

通过映射,关系的所有者是Car而不是Person ......这就是为什么在保存Person时,Car不会被保存。如果您删除了mappedBy,那么该关系的所有者就会变成Person,并且您会得到预期的行为!