1

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

异常描述:来自实体类 [class entity.InstrumentExtRef] 的注释元素 [field instrument] 上的 @JoinColumns 不完整。当源实体类使用复合主键时,必须使用@JoinColumns 为每个连接列指定@JoinColumn。name 和 referencedColumnName 元素都必须在每个这样的 @JoinColumn. 中指定。有关更多详细信息,请参阅 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 是指具有主键 code_type(引用列)的表 instrument_code_type。类 Instrument 是指 table Instrument,它本身具有由列“id”(引用列)和列“exchange_exchange_code”组成的复合主键。

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

4

1 回答 1

1

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

“...必须使用 @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

我怀疑我的下一个问题与复合主键由来自两个不同实体(仪器和仪器代码类型)的列组成的事实有关。但是现在上述更改让我克服了构建问题,如果出现下一个问题,我将单独处理它。

于 2013-09-29T02:41:15.540 回答