【问题标题】:JPA Entity class giving error with 2 @GeneratedValue fieldsJPA Entity 类给出 2 个 @GeneratedValue 字段的错误
【发布时间】:2017-06-27 00:39:51
【问题描述】:

我有两列将使用@GeneratedValues,但是当我这样放置它们时会出错; " 异常说明:类 [class Testing] 有两个 @GeneratedValues:用于字段 [Testing.SEQ_NO] 和 [Testing.ID]。只允许一个。"

@Table(name = "TABLE1")
@Entity
public class Testing{

@GeneratedValue(strategy=GenerationType.AUTO)
@Id
private Long id;

@Column(name = "LINKAGE_ID")
private int linkageId;

@Column(name = "TRANSFER_ID")
private int transferId;

@Column(name = "STATUS")
private String status;

@Column(name = "COMMENTS")
private String comments;

@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="SEQ")
@SequenceGenerator(name="SEQ",sequenceName="SEQ", allocationSize=1)
@Column(name = "SEQ_NO")
private int seqNo;



**I have also created a simple sequence in Db using this:**


CREATE SEQUENCE SEQ START WITH 1

【问题讨论】:

  • 我正在想办法在同一个实体类中自动生成 ID 和 SEQ_NO。
  • JPA 规范说只能生成 @Id 字段。一些 JPA 提供程序(例如 DataNucleus)也允许生成其他字段,但为了便于移植,仅生成“id”字段

标签: java oracle hibernate jpa eclipselink


【解决方案1】:

就像错误消息所说,只允许一个带有@GeneratedValue 的字段,但你有两个。
请删除其中之一。

恐怕你不能通过简单的注释来做你想做的事情。
查看此现有帖子以了解解决方法。
workaround

不知道为什么需要在同一个表中有两列,它们的值需要自动递增。
如果你真的想要两个 Unique 列,你可以像往常一样使用你的 id 和另一列的 UUID。

【讨论】:

  • 嗨@minjinyu,我必须自动生成两者。
  • @verma_neeraj 恐怕你不能用休眠中的简单注释来做到这一点,兄弟。查看更新。
  • @mijinyu,非常感谢。
  • 你能解释一下为什么你需要同一个表中的 2 列来自动递增,以便我们可以考虑一些方法
  • @verma_neeraj 很高兴我的回答有帮助。 BTW,友情提醒。当你回复某人的评论时,你可以输入“@”+名字的前几个字母+“tab”。名字会自动弹出,这样名字就不会有错别字了,干杯。
【解决方案2】:

在 Postgresql 中使用 columnDefinition="serial" 它对我有用。

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(columnDefinition="serial")
@Generated(GenerationTime.INSERT)
private Long seqNo;

【讨论】:

    猜你喜欢
    • 2018-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 2021-12-14
    • 2021-12-19
    • 1970-01-01
    • 2011-07-15
    • 2022-10-06
    相关资源
    最近更新 更多