我在我的应用程序中使用JPA.在其中一个表中,我没有使用主键(我知道它的设计很糟糕).
现在生成的实体如下所述:
@Entity
@Table(name="INTI_SCHEME_TOKEN")
public class IntiSchemeToken implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name="CREATED_BY")
private String createdBy;
@Temporal( TemporalType.DATE)
@Column(name="CREATED_ON")
private Date createdOn;
@Column(name="SCH_ID")
private BigDecimal schId;
@Column(name="TOKEN_ID")
private BigDecimal tokenId;
public IntiSchemeToken() {
}
public String getCreatedBy() {
return this.createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public Date getCreatedOn() {
return this.createdOn;
}
public void setCreatedOn(Date createdOn) {
this.createdOn = createdOn;
}
public BigDecimal getSchId() {
return this.schId;
}
public void setSchId(BigDecimal schId) {
this.schId = schId;
}
public BigDecimal getTokenId() {
return this.tokenId;
}
public void setTokenId(BigDecimal tokenId) {
this.tokenId = tokenId;
}
}
Run Code Online (Sandbox Code Playgroud)
这里在我的项目中,eclipse IDE在这个类上显示ERROR标记(红色交叉),错误是" 实体没有定义主键属性 ".
任何人都可以告诉我,如何创建没有主键的实体?
谢谢.
JB *_*zet 20
你不能.实体必须具有唯一的不可变ID.它不必被定义为数据库中的主键,但是字段或字段集必须唯一地标识该行,并且其值可能不会更改.
因此,如果您的实体中的一个字段或您实体中的一组字段满足这些条件,请将它(或它们)作为实体的ID.例如,如果用户无法在同一天创建两个实例,则可以使[createdOn,createdBy]成为实体的ID.
当然这是一个糟糕的解决方案,您应该真正更改架构并在实体中添加自动生成的单列ID.
如果主键(PK)是在实体类中继承的托管超类,则必须在persistence.xml文件中包含映射的超类名.
查看错误报告:https: //bugs.eclipse.org/bugs/show_bug.cgi?id = 361042
| 归档时间: |
|
| 查看次数: |
40598 次 |
| 最近记录: |