在将我的 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 实体中的复合主键是问题,但根据我对其他类似(但不完全相同)问题的研究,我认为我的实体类看起来不错。但我对此比较陌生,可能会遗漏一些东西。