JPA @OneToMany:外键为空 [英] JPA @OneToMany : foreign key is null

查看:371
本文介绍了JPA @OneToMany:外键为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要帮助来正确定义@OneToMany JPA批注.尝试了不同的方法,但仍然会出现错误/问题,例如visitorCharacteristic表中的外键(visitor_revision_id)为空.

I need help to define correctly a @OneToMany JPA annotation. Tried different ways but still get error/issues like the foreign key (visitor_revision_id) is null in the visitorCharacteristic table.

我想用"visitor_revision_id"将2个表联接起来

I would like to join the 2 tables with the "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;    
}

预先感谢您的帮助

推荐答案

JPA不会为您设置VisitorCharacteristic#visitor字段,您必须手动执行.如果您有某种添加后续VisitorCharacteristic的方法,则还应该添加用于在特征中设置visitor的代码:

JPA will not set VisitorCharacteristic#visitor field for you, you have to do it manually. If you have some method for adding subsequent VisitorCharacteristics, you should add the code for setting visitor in characteristic as well:

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

此处您会找到一个Gist,其代码效果很好-请看第79行

Here you can find a Gist with your code which works well - look at the line 79.

这篇关于JPA @OneToMany:外键为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆