2016-12-05 17 views
0

@OneToMany JPA注釈を正しく定義するのに助けが必要です。他の方法を試しましたが、visitorCharacteristicテーブルで外部キー(visitor_revision_id)がnullのようなエラー/問題が発生します。JPA @OneToMany:外部キーがnullです

は、私が「visitor_revision_id」伝えることの困難な故障を示すテストケースがなければ、あなたの助け

+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

を事前に

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

おかげで2つのテーブルを結合したいと思います。

ここではいくつかのものは、あなたが試すことができます:

  1. VisitorCharacteristic

  2. に結合列の注釈に, nullable = falseを追加セットの両方の方向に関係 Visitor v = new Visitor(); VisitorCharacteristic vc = new VisitorCharacteristic(); v.setVisitorCharacteristicList(Arrays.asList(vc)); vc.setVisitor(v);