休眠/持久化,无@Id

我有一个数据库视图,它生成的结果集没有真正的主键。我想使用Hibernate/Persistence将此结果集映射到Java对象上。当然,因为没有PK,我不能用来装饰任何字段。@Id

部署时,Hibernate 抱怨缺少 .我该如何解决这个问题?@Id


答案 1

如果存在使行唯一的列组合,请围绕列的组合对主键类进行建模。如果没有,你基本上就不走运了 - 但你应该重新审视视图的设计,因为它可能没有意义。

有几种不同的方法:

@Entity
public class RegionalArticle implements Serializable {

    @Id
    public RegionalArticlePk getPk() { ... }
}

@Embeddable
public class RegionalArticlePk implements Serializable { ... }

艺术

@Entity
public class RegionalArticle implements Serializable {

    @EmbeddedId
    public RegionalArticlePk getPk() { ... }
}

public class RegionalArticlePk implements Serializable { ... }

详情如下:http://docs.jboss.org/ejb3/app-server/HibernateAnnotations/reference/en/html_single/index.html#d0e1517

这是一个描述类似问题的帖子:http://www.theserverside.com/discussions/thread.tss?thread_id=22638


答案 2

对于每个实体,必须至少指定以下一项:

  • 个@Id
  • 多个@Id和一个@IdClass(对于复合主键)
  • @EmbeddedId

所以也许你可以创建一个复合主键,包含多个字段?


推荐