当前位置: 首页 > 知识库问答 >
问题:

JPA-EclipseLink将单向一对多关系持久化失败

成浩漫
2023-03-14

我试图持久化一个非常简单的单向一对多关系,但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;
}
@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();
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]

共有1个答案

章彬郁
2023-03-14

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

 类似资料:
  • 问题内容: 我试图保持一个非常简单的单向一对多关系,但是EclipseLink(2.3.1)失败。 服务等级(家长): 参数类(子级):( 当然,数据库中有“ service_id”外键字段,由于它是单向关系,因此未在类中表示)。 这是实体持久性的代码: 我得到这个异常: 编辑:由于数据的性质,数据库字段具有(并且应该具有)非空约束。 这是错误还是代码有问题? 问题答案: 尝试删除参数表的serv

  • 假设我们有两个实体,Entity和Entity。有多个s。节点可以属于多个集群。因此,在

  • 谢谢 ----更新----

  • 问题内容: 也许这是一个愚蠢的问题,但这困扰了我。 我有一个从员工到车辆的双向一对多关系。当我第一次将Employee保留在数据库中时(即它没有分配的ID),我也希望保留其关联的Vehicles。 目前,这对我来说很好,除了我保存的Vehicle实体没有自动映射关联的Employee,并且在数据库中Vehicle表中的employee_id外键列为空。 我的问题是,是否可以在雇员本身被保留的同时保

  • 我目前正在使用Java EE/Eclipselink和PostgreSQL开发一个web应用程序。关于我的实体,我特别管理“Project”、“User”和“Right”(读、写、删除等访问权限)。这些实体之间的关系是:一个项目可以有多个对该项目拥有不同权限的用户。因此,我得到了一个三重关联:Project+User+Right。 在这个协会坚持的过程中,我面临着一个恼人的问题。当我用它的信息持久

  • 情况: 我有两个与OneTomany/ManyToone关系相关的实体。 想象一下,每个类也有一个名为id和getter和setter的PK。 问题: 如果我创建一个EntityA实例并设置一个与已经存在的EntityB实例的关系并持久化这个新实例,那么所有数据都会正确地保存到数据库中。但是,如果我从我的EntityManager请求EntityB的实例,它的列表中将不包含刚刚持久化的Entity