2016-12-05 292 views
0

我需要幫助才能正確定義@OneToMany JPA註釋。嘗試了不同的方式,但仍然在visitorCharacteristic表中獲取錯誤/問題,如外鍵(visitor_revision_id)爲空。JPA @OneToMany:外鍵爲空

我想加入2代表與「visitor_revision_id」

@Entity 
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") 
@ToString 
public class Visitor { 
    @Id 
    @Column(name="visitor_revision_id") 
    @GeneratedValue(strategy= GenerationType.IDENTITY) 
    Long id; 

    String visitorCode; 

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "visitor") 
    List<VisitorCharacteristic> visitorCharacteristicList; 
} 

@Entity 
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id") 
@ToString 
class VisitorCharacteristic { 
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    Long id; 

    @JoinColumn(name = "visitor_revision_id") 
    @ManyToOne(optional = false) //fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    Visitor visitor; 

    @Column(nullable = false) 
    String attributeCode; 

    @Column(nullable = false) 
    String attributeValue;  
} 

在此先感謝您的幫助

+0

你能提供一個顯示失敗的單元測試例子嗎? –

+0

感謝您的快速響應!我不知道我必須手動設置VisitorCharacteristic#訪問者。 – GeorgesD

回答

2

JPA會沒有爲你設置VisitorCharacteristic#visitor字段,你必須手動完成。如果您對加入後續的VisitorCharacteristic小號一些方法,你應該添加的代碼爲特徵設置訪客,以及:

public void addVisitorCharacteristic(VisitorCharacteristic visitorCharacteristic) { 
    if (visitorCharacteristicList == null) { 
     visitorCharacteristicList = new ArrayList<>(); 
    } 
    visitorCharacteristic.visitor = this; 
    visitorCharacteristicList.add(visitorCharacteristic); 
} 

Here你可以找到與你的代碼中的要點效果很好 - 看線79。

0

沒有一個測試用例出故障的很難說。

這裏有一些事情你可以嘗試:

  1. 添加, nullable = false到聯接列註釋上VisitorCharacteristic

  2. 設置爲兩個方向的關係 Visitor v = new Visitor(); VisitorCharacteristic vc = new VisitorCharacteristic(); v.setVisitorCharacteristicList(Arrays.asList(vc)); vc.setVisitor(v);