0
@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ここを含めると、正常に機能します。

4

2 に答える 2

1

に電話してみてくださいcar.setPerson(per)

于 2013-03-13T15:32:56.420 に答える
1

あなたのマッピングでは、関係の所有者は人ではなく車です...そのため、人を保存するときに車は保存されません。を削除するmappedByと、リレーションの所有者が Person になり、期待どおりの動作が得られます!

于 2013-03-13T16:32:45.780 に答える