gpt4 book ai didi

mysql - 错误 : Cannot use identity column key generation with ( TABLE_PER_CLASS )

转载 作者:行者123 更新时间:2023-12-04 14:22:36 24 4
gpt4 key购买 nike

我正在使用 Hibernate 来保存所有实体都是从基本抽象实体继承的实体。对于所有具体实体,分别有数据库表,带有自动增量主键列。但是使用 GenerationType 作为“AUTO”或“IDENTITY”会出错。我希望代表每个具体实体类的数据库表中的所有记录都应该具有顺序递增的 ID 值。

com.something.SuperClass:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class SuperClass implements Serializable {
private static final long serialVersionUID = -695503064509648117L;

long confirmationCode;

@Id
@GeneratedValue(strategy = GenerationType.AUTO) // Causes exception!!!
public long getConfirmationCode() {
return confirmationCode;
}

public void setConfirmationCode(long confirmationCode) {
this.confirmationCode = confirmationCode;
}
}

com.something.SubClass:
@Entity
public abstract class Subclass extends SuperClass {
private static final long serialVersionUID = 8623159397061057722L;

String name;

@Column(nullable = false)
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

给我这个异常(exception):
Caused by: org.hibernate.MappingException: Cannot use identity column key
generation with <union-subclass> mapping for: com.something.SuperClass
What's the best and most convenient way for me to generate the ID's? I do not want to change my inheritance strategy.

我知道如果我将 GenerationType 从“AUTO”更改为“TABLE”可以解决这个问题,但是这个解决方案的问题是,生成的键没有精确的顺序。它在键之间留下很大的间隙。

我正在寻找允许所有表使用由 Mysql AutoIncrement 主列生成的 Auto Incremental 值的解决方案。

在此先感谢大家。

P.S.:我已经浏览了以下帖子:
Cannot use identity column key generation with <union-subclass> ( TABLE_PER_CLASS )

最佳答案

这里的问题是你混合了“每类表”继承和 GenerationType.Auto。在“每类一张 table ”的策略中,您每个类(class)使用一张 table ,每个 table 都有一个 ID。
我遇到了同样的问题,我通过用 GenerationType.TABLE 替换 @GeneratedValue(strategy = GenerationType.TABLE) 来解决这个问题
最终代码如下所示

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class SuperClass implements Serializable {
private static final long serialVersionUID = -695503064509648117L;

long confirmationCode;

@Id
@GeneratedValue(strategy = GenerationType.TABLE)
public long getConfirmationCode() {
return confirmationCode;
}

public void setConfirmationCode(long confirmationCode) {
this.confirmationCode = confirmationCode;
}
}

关于mysql - 错误 : Cannot use identity column key generation with <union-subclass> ( TABLE_PER_CLASS ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21047167/

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