2016-12-05 288 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);