gpt4 book ai didi

java - 如何在hibernate中不继承Id generatedValue(在子类中禁用@GenerateValue)

转载 作者:行者123 更新时间:2023-11-30 03:54:06 24 4
gpt4 key购买 nike

我有一个 hibernate 实体父类(super class):

@MappedSuperclass
public abstract class Pojo_Entity_SuperClass
{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID", unique=true, nullable=false, precision=18, scale=0)
protected long id;
public Long getId() {return id;}

//Other entity fields and methods
}

接下来我继承其他实体类,如下所示:

@Entity
@Table(name="USR")
public class Usr extends Pojo_Entity_SuperClass
{
//Columns, fileds and others
}

但在某些情况下,我想继承具有“id”字段的实体,而不使用 @GenerateValue 注释。问题是 - 如何在子类中禁用 id 的 @GenerateValue 注释?

最佳答案

您可以简单地将@Id从基类移动到子类,然后决定生成策略。

所以你可以:

@MappedSuperclass
public abstract class Pojo_Entity_SuperClass
{
public abstract Long getId();

public abstract void setId(Long id);

//Other entity fields and methods
}

@Entity
@Table(name="USR")
public class Usr extends Pojo_Entity_SuperClass {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="ID", unique=true, nullable=false, precision=18, scale=0)
protected long id;
}

@Entity
@Table(name="ADMIN")
public class Admin extends Pojo_Entity_SuperClass {
@Id
@SequenceGenerator(name = "ID_GENERATOR", sequenceName = "admin_id_seq")
@GeneratedValue(generator = "ID_GENERATOR")
@Column(name="ID", unique=true, nullable=false, precision=18, scale=0)
protected long id;
}

这是您需要的吗?

关于java - 如何在hibernate中不继承Id generatedValue(在子类中禁用@GenerateValue),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23687087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com