Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么JPA在基本用例中忽略了我的@OrderColumn?_Java_Jpa_Eclipselink - Fatal编程技术网

Java 为什么JPA在基本用例中忽略了我的@OrderColumn?

Java 为什么JPA在基本用例中忽略了我的@OrderColumn?,java,jpa,eclipselink,Java,Jpa,Eclipselink,检查实体: @Entity @Table(name="INSPECTION") public class Inspection implements Serializable { ... @OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, orphanRemoval=true) @OrderColumn(name="LIST_INDEX", nullable=fa

检查实体:

@Entity
@Table(name="INSPECTION")
public class Inspection implements Serializable
{
    ...
    @OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, orphanRemoval=true)
    @OrderColumn(name="LIST_INDEX", nullable=false)
    @JoinColumn(name="INSPECTION_ID")
    private List<RecommendationInstance> recommendations;
    ...
}
表的创建如下所示:

  CREATE TABLE "RECOMMENDATION_INSTANCE" 
   (    "ID" NUMBER(19,0) NOT NULL,
    "INSPECTION_ID" NUMBER(19,0) NOT NULL,
    "RECOMMENDATION_ID" NUMBER(19,0) NOT NULL,
    "DESCRIPTION" VARCHAR2(4000 BYTE) NOT NULL,
    "LIST_INDEX" NUMBER(4,0) NOT NULL
   ) ;
创建新的RecommendationInstance并尝试保存InspectionEntity时,出现以下错误:

Caused by: org.eclipse.persistence.exceptions.DatabaseException: 
Internal Exception: java.sql.SQLIntegrityConstraintViolationException: integrity constraint violation: NOT NULL check constraint; SYS_CT_10161 table: "RECOMMENDATION_INSTANCE" column: "LIST_INDEX"
Error Code: -10
Call: INSERT INTO RECOMMENDATION_INSTANCE (ID, DESCRIPTION, INSPECTION_ID, RECOMMENDATION_ID) VALUES (?, ?, ?, ?)
    bind => [102, Sprinkler System DESCRIPTION, 110, 40]
我错过了一些关系吗?看起来列表索引似乎被完全忽略了


为了提供进一步的信息,如果需要的话,我确实使用了一个连接表。但是,我正在进行重构,因为不需要连接表。这将列表索引列从join表移动到RecommendationInstance表。

我以前做过,但使用@OrderBy注释,例如,我最近编写的一段代码:

@OneToMany(mappedBy = "product")
@OrderBy("createdDateTime ASC")
private Collection<SkuUpc> skuUpcs;

我发现,当我删除NOTNULL约束时,一切都正常了,但我决定现在可以处理这个问题。查看日志,JPA首先插入不带list_索引的行,因此违反了约束,然后立即运行更新以设置list_索引

这个答案确实产生了一个更具体的问题,即为什么在插入行时不设置list_索引,即使我指定nullable=false也是如此


我在这里问了一个更具体的问题:

看起来您的RecommendationInstance实体中没有任何列表索引属性,除非它在。。。部分因此,难怪持久性提供程序会“忽略”它。位于:的文档说明:OrderColumn由映射维护,不应该是目标对象的属性。我看到了,而且在API文档中也看到了,不仅仅是EclipseLink文档,请原谅我的无知。除了你正在使用最新版本的EclipseLink之外,我没有其他建议了,所以我会滑回到阴影中。是的,版本2.5.1。如果你有其他想法,一定要走出阴影:只有在列表中保存RecommendationInstance时,才设置order列,而不是单独存储。不幸的是,这是一个用户定义的顺序,因此没有像ASC这样的系统顺序可以应用。创建/更新时,我需要保留列表中给出的顺序。这是因为您的RecommendationInstance实体是一个独立的实体,没有order列的映射。Eclipselink旨在仅从实体本身创建插入。有一个功能要求eclipselink存储语句,并在处理其他映射时添加到这些语句中,我只是在手机上找不到链接。您介意将该答案放在引用的问题上吗?
@OneToMany(mappedBy = "product")
@OrderBy("createdDateTime ASC")
private Collection<SkuUpc> skuUpcs;
@Column(name = "created_dt")
private Date createdDateTime = new Timestamp(new Date().getTime());