首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JPA -使用EclipseLink保持单向的一对多关系失败

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

Stack Overflow用户
提问于 2012-10-06 07:39:47
回答 6查看 25.3K关注 0票数 26

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

服务类别(父级):

代码语言:javascript
复制
@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“外键字段,它没有在类中表示,因为它是单向关系)。

代码语言:javascript
复制
@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;
}

这是实体持久化的代码:

代码语言:javascript
复制
    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();

我得到了这个例外:

代码语言:javascript
复制
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具有(并且应该具有)非空约束的数据库字段。

这是一个bug还是代码中的错误?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-10-07 03:42:32

尝试删除参数表的service_id字段上的not null约束。Eclipselink将在单独的语句中更新单向1:m连接列的外键,因此您需要禁用或延迟约束检查。将其设置为双向将允许使用其余参数数据更新fp字段。

票数 14
EN

Stack Overflow用户

发布于 2012-12-27 04:52:47

@JoinColumn上使用nullable = false

代码语言:javascript
复制
@JoinColumn(name = "service_id", nullable = false)
票数 37
EN

Stack Overflow用户

发布于 2012-11-21 00:41:18

您可以更改hibernate version<4.0的持久性,您的代码将运行良好。引用中的“好”“仅用于一对多关系保存/持久化父级,而不是通过单独的任务保存/持久化子集合”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12755380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档