Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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连接_Java_Jpa_Join_Composite - Fatal编程技术网

Java 复合密钥部分的JPA连接

Java 复合密钥部分的JPA连接,java,jpa,join,composite,Java,Jpa,Join,Composite,我尝试用JPA连接两个表 第一个表与实体ReportTripSingle关联 第二个表与实体TripData关联 第二个表的主键用复合键(实体TripDataPK)描述 实体TripDataPK 实体数据 实体报告单 正如你所看到的,我想加入ReportTripSingle和TripData 它不起作用:( 以下是堆栈跟踪: 原因:org.hibernate.AnnotationException: 的引用列名称(FTP\U ID) com.nexo.susan.be.model.ReportT

我尝试用JPA连接两个表

第一个表与实体ReportTripSingle关联 第二个表与实体TripData关联 第二个表的主键用复合键(实体TripDataPK)描述

实体TripDataPK 实体数据 实体报告单 正如你所看到的,我想加入ReportTripSingle和TripData

它不起作用:(

以下是堆栈跟踪:

原因:org.hibernate.AnnotationException: 的引用列名称(FTP\U ID) com.nexo.susan.be.model.ReportTripSingle.tripData引用 com.nexo.susan.be.model.TripData未映射到 org.hibernate.cfg.BinderHelper.createSyntheticPropertyReference(BinderHelper.java:336) 在 org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:116) 在 org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1522) 在 org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1443) 在 secondPassCompile(Configuration.java:1346) 在 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1737)

事实上,TripData并没有映射到单个属性,但我想加入FTP\u ID


问候。

我无法加入复合密钥的一部分。 为了解决这个问题,我修改了与实体ReportTripSingle关联的表,添加了ftpBatchId和ftpDay作为外键

如果有人感兴趣,以下是我的实现:

实体报告单

public class ReportTripSingle implements java.io.Serializable {

@Id
@Column(name = "TRE_ID", precision = 10, scale = 0)
private long id;

@Column(name = "TRE_FTP_ID", length = 15, nullable = false, precision = 10, scale = 0, insertable = false, updatable = false)
private long tripDataId;

@Column(name = "TRE_BATCH_ID", nullable = false, insertable = false, updatable = false)
private long tripBatchId;

@Column(name = "TRE_FTP_DEP_DAY", nullable = false,insertable = false, updatable = false)
private long tripDay;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({
        @JoinColumn(name = "TRE_FTP_ID", referencedColumnName = "FTP_ID"),
        @JoinColumn(name = "TRE_BATCH_ID", referencedColumnName = "FTP_BATCH_ID"),
        @JoinColumn(name = "TRE_FTP_DEP_DAY", referencedColumnName = "FTP_DAY")

})
private TripData tripData;
}

更好的选择是在@Joincolumn中使用修饰符insertable=false和updateable=false,如中所述:


“它不工作”是什么意思?你能提供一些错误日志、异常、不希望出现的行为吗?我已经复制了这个bug并添加了stacktrace
public class TripData implements java.io.Serializable {

    @EmbeddedId
    private TripDataPK tripDataPK;

    // some properties ...

}
public class ReportTripSingle implements java.io.Serializable {


    @Id
    @Column(name = "TRE_ID", precision = 10, scale = 0)
    private long id;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "TRE_FTP_ID", referencedColumnName = "FTP_ID")
    private TripData   tripData;


}
public class ReportTripSingle implements java.io.Serializable {

@Id
@Column(name = "TRE_ID", precision = 10, scale = 0)
private long id;

@Column(name = "TRE_FTP_ID", length = 15, nullable = false, precision = 10, scale = 0, insertable = false, updatable = false)
private long tripDataId;

@Column(name = "TRE_BATCH_ID", nullable = false, insertable = false, updatable = false)
private long tripBatchId;

@Column(name = "TRE_FTP_DEP_DAY", nullable = false,insertable = false, updatable = false)
private long tripDay;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumns({
        @JoinColumn(name = "TRE_FTP_ID", referencedColumnName = "FTP_ID"),
        @JoinColumn(name = "TRE_BATCH_ID", referencedColumnName = "FTP_BATCH_ID"),
        @JoinColumn(name = "TRE_FTP_DEP_DAY", referencedColumnName = "FTP_DAY")

})
private TripData tripData;
}
public class ReportTripSingle implements java.io.Serializable {


    @Id
    @Column(name = "TRE_ID", precision = 10, scale = 0)
    private long id;

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "TRE_FTP_ID", referencedColumnName = "FTP_ID", **insertable = false, updatable = false**)
    private TripData   tripData;

}