java - Netbeans - 由于复合主键导致 Glassfish 服务器部署错误

标签 java jpa deployment glassfish netbeans-7

目前,我在将 Netbeans 项目部署到 Glassfish 服务器时遇到了 BUILD FAILED 错误的问题。我从日志中收到以下错误:

异常描述:实体类 [classEntity.InstrumentExtRef] 中带注释的元素 [field Instrument] 上的 @JoinColumns 不完整。当源实体类使用复合主键时,必须使用@JoinColumns为每个连接列指定@JoinColumn。必须在每个此类@JoinColumn 中指定名称和referencedColumnName 元素。有关更多详细信息,请参阅server.log。

出现问题的表是instrument_ext_ref,并且具有以下字段的复合主键:instrument_id 和instrument_code_type。

似乎有问题的实体类 - InstrumentExtRef - 具有以下声明和注释。

@EmbeddedId
protected InstrumentExtRefPK instrumentExtRefPK;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 16)
@Column(name = "reference")
private String reference;
@JoinColumn(name = "instrument_code_type", referencedColumnName = "code_type", insertable = false, updatable = false)
@ManyToOne(optional = false)
private InstrumentCodeType instrumentCodeType1;
@JoinColumn(name = "instrument_id", referencedColumnName = "id", insertable = false, updatable = false)
@ManyToOne(optional = false)
private Instrument instrument;

包含 @EmbeddedId 详细信息 (InstrumentExtRefPK) 的实体类如下所示:

@Embeddable
public class InstrumentExtRefPK implements Serializable {
@Basic(optional = false)
@NotNull
@Column(name = "instrument_id")
private int instrumentId;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 10)
@Column(name = "instrument_code_type")
private String instrumentCodeType;

类InstrumentCodeType引用表instrument_code_type,它有一个主键code_type(引用的列)。 Instrument类是指表instrument,它本身有一个复合主键,由列“id”(引用列)和列“exchange_exchange_code”组成。

从错误消息中可以明显看出,InstrumentExtRef 实体中的复合主键是问题所在,但根据我对其他类似(但不完全相同)问题的研究,我认为我的实体类看起来不错。但我对此还比较陌生,可能会遗漏一些东西。

最佳答案

在对实体类中复合键的创建/使用进行更多研究后,我在收到的错误消息中发现了一个微妙的点。

“...必须使用@JoinColumn*s*为每个连接列指定”。我没有使用 @JoinColumns 注释。或者至少 Netbeans 没有以这种方式创建实体类。可能是因为每个连接列都来自不同的源实体/表。

按如下方式更正我的实体类后,项目能够成功部署。

    @JoinColumns({
    @JoinColumn(name = "instrument_code_type", referencedColumnName = "code_type",    insertable = false, updatable = false),
    @JoinColumn(name = "instrument_id", referencedColumnName = "id", insertable = false, updatable = false)})
private InstrumentCodeType instrumentCodeType1;
private Instrument instrument;

正是在这里,我开始发现问题可能出在哪里: https://access.redhat.com/site/documentation/en-US/JBoss_Enterprise_Application_Platform/5/html/Hibernate_Annotations_Reference_Guide/ch02s02s06.html

我怀疑我的下一个问题与复合主键由来自两个不同实体(instrument 和instrumentCodeType)的列组成有关。但目前上述更改让我解决了构建问题,如果出现下一个问题,我将单独处理它。

关于java - Netbeans - 由于复合主键导致 Glassfish 服务器部署错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19063032/

相关文章:

hibernate - 如何与 JPA/Hibernate 建立基本的多对多关系?

python - 在生产中运行 web2py 调度程序

java - 使用 hadoop 运行 jar 时 NoSuchMethodError Sets.newConcurrentHashSet()

java - 为zuul转发错误设置自定义错误

java - 如何在 ListView 中显示多个图像?

java - spring-boot-starter-data-jpa 依赖错误

java - JPA 如何从另一个表中检索值?

azure - Arm 模板 - 在请求中发现错误的 JSON 内容

deployment - Glassfish 上的 Liferay。 Spring portlet 已成功部署但未显示在 Liferay "Add Application"列表中

java - 类无法实例化