JPA错误:实体没有定义主键属性

Gun*_*hah 15 entity jpa

我在我的应用程序中使用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.

  • +1.如果从业务逻辑的角度来看不需要它,只需添加一个人工ID列,以使ORM更快乐,让您的生活更轻松. (3认同)

Cha*_*att 7

如果主键(PK)是在实体类中继承的托管超类,则必须在persistence.xml文件中包含映射的超类名.

查看错误报告:https: //bugs.eclipse.org/bugs/show_bug.cgi?id = 361042


MGP*_*GPJ 6

如果需要定义没有主键的类,则应将该类标记为Embeddable类.否则,您应该为您定义的所有实体提供主键.