从JPA同时填充主 - 详细信息表

时间:2013-04-03 01:18:11

标签: jpa

我有一个类似于hibernate示例中的双向实体: http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-mapping-association

@Entity
public class Troop {
    @OneToMany
    @JoinColumn(name="troop_fk") //we need to duplicate the physical information
    public Set<Soldier> getSoldiers() {
    ...
}

@Entity
public class Soldier {
    @ManyToOne
    @JoinColumn(name="troop_fk", insertable=false, updatable=false)
    public Troop getTroop() {
    ...
}

现在我需要通过JSON将所有记录保存到2个表中:

{
  "TroopName": "ABC", 
  "Soldiers": [{"Name":"Jack", "Age": "40"}, {"Name":"TOM", "Age": "30"}]
}

它将在部队表中插入1条记录,在士兵表中插入2条记录,工作正常。唯一的问题是在士兵中缺少外键。我认为它可能与troop.Id相关,当士兵表填充时不会生成。那我怎么能把这个id填充给士兵?

我正在使用spring mvc + spring roo + json support

1 个答案:

答案 0 :(得分:0)

我会自己回答我的问题。问题是,当spring roo生成aspectj代码来设置士兵时,它不会设置后向引用(尽管我已经告知它是双向关系)。我必须自己添加。

public void Troop.setSoldiers(Set<Soldier> soldiers) {
    this.soldiers= soldiers;  // spring roo only generate this line!

    // I add the following segment:
    for(Soldier soldier: soldiers) {
        soldier.setTroop(this);
    }
}