java - JPA - 使用 EclipseLink 保持单向一对多关系失败

标签 java jpa orm eclipselink

我正在尝试保持一个非常简单的单向一对多关系,但 EclipseLink (2.3.1) 失败。

服务类(父):

@Entity
@Table(name = "tbl_service2")
public class Service implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="service_id")
    public long serviceID;

    @Column(name="name")
    public String name;

    @OneToMany(cascade={CascadeType.ALL})
    @JoinColumn(name="service_id", referencedColumnName="service_id")
    public Set<Parameter> parameters;
}

参数类(子):
(当然数据库中有“service_id”外键字段,类中没有表示,因为它是单向关系)。

@Entity
@Table(name = "tbl_service_parameters2")
public class Parameter implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="param_id")
    public long parameterID;

    @Column(name="name")
    public String name;
}

这是实体持久化的代码:

    Service service = new Service();
    service.parameters = new HashSet<Parameter>();
    service.name = "test";
    Parameter param = new Parameter();
    param.name = "test";
    service.parameters.add(param);
    em.persist(service);
    em.flush();

我得到了这个异常(exception):

Internal Exception: java.sql.SQLException: Field 'service_id' doesn't have a default value
Error Code: 1364
Call: INSERT INTO tbl_service_parameters2 (name) VALUES (?)
    bind => [test]

编辑:由于数据的性质,数据库字段 service_id 具有(并且应该具有)非空约束。

这是一个错误还是代码中有问题?

最佳答案

@JoinColumn 上使用 nullable = false:

@JoinColumn(name = "service_id", nullable = false)

关于java - JPA - 使用 EclipseLink 保持单向一对多关系失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12755380/

相关文章:

python - Django ORM : Ordering w/aggregate functions — None special treatment

用于查找匹配字符串的java正则表达式

java - 在使用 ZXing 库中的 IntentIntegrator 时,我可以通过 Intent 向条码扫描器添加一个闪光按钮吗?

java - 更新时嵌入的 AttributeOverride 不起作用

java - 是否可以在运行时向正在运行的 Java Web 应用程序添加新的 JPA/Spring 实体

mysql - 简单的 hibernate 不起作用,但级联查询可以

java - Log4j 2 : How to enable ANSI colours on Windows console?

java - 我在资源中注入(inject)了服务接口(interface),但无法弄清楚如何配置资源方法调用

java - JPA 唯一约束验证

orm - Extbase:在运行时选择延迟加载或预先加载