【发布时间】:2025-12-09 13:55:02
【问题描述】:
我有两个不同的枚举,它们位于两个不同的表中(它们具有相同的结构,但含义不同)。
这是我的第一个名为 TYPE 的表,来自 FIRST_SCHEMA
id team desc days
1 "AB" "Do Thins" 2
2 "CD" "Other things" 3
这是第二个,称为 TYPE,来自 SECOND_SCHEMA。
id team desc days
1 "AB" "Other other thins" 1
2 "CD" "More and more things" 1
我尝试使用 hibernate 注释在 Java 中映射这个枚举,它们是这样的:
FirstEnum.java
@Entity
@Table(name = "TYPE", schema="FIRST_SCHEMA")
public enum FirstEnum implements SuperEnum<FirstEnum> {
DO_THINGS(1, "AB", "Do things", 2),
OTHER_THINGS(2, "CD", "Other things", 3);
@Id
@NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private final int value;
@Column(name = "team")
private final String team;
@Column(name = "desc")
private final String dec;
@Column(name = "days")
private final int days;
//getters and setters
}
SecondEnum.java
@Entity
@Table(name = "TYPE", schema="SECOND_SCHEMA")
public enum SecondEnum implements SuperEnum<SecondEnum> {
DO_THINGS(1, "AB", "Other other thins", 2),
OTHER_THINGS(2, "CD", "More and more thingsS", 3);
@Id
@NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private final int value;
@Column(name = "team")
private final String team;
@Column(name = "desc")
private final String dec;
@Column(name = "days")
private final int days;
//getters and setters
}
使用这些类型之一的类映射如下:
Foo.java
@Table(name = "TABLE", schema="FIRST_SCHEMA")
@Entity
public class Foo extends Bar implements Serializable {
private static final long serialVersionUID = 1L;
@Enumerated(EnumType.ORDINAL)
@Column(name = "id_type")
private FirstEnum type;
//getters and setters
}
如果我在我的persistence.xml 中设置该行:
<property name="hibernate.hbm2ddl.auto" value="update" />
到
<property name="hibernate.hbm2ddl.auto" value="none" />
它按预期工作,它不会创建新的“类型”表。但是,如果没有,即使我已经有类型表,它也会创建这个空表。
我映射错了什么?
【问题讨论】:
-
“空表”是什么意思,它叫什么名字?
-
当我使用“update”参数离开时,hibernate 在“dbo”模式下创建一个名为“type”的新表。
-
您可以尝试从
persistence.xml中完全删除hibernate.hbm2ddl.auto属性吗? -
我删除了它,显然工作正常,但为什么呢?
-
其实我还没有找到关于这个特定问题的任何好的参考。我自己也遇到了这个问题,并且知道它是这样工作的。我怀疑这可能是一个错误。但是我再次在文档中没有发现任何关于此的强大内容。为您的问题 +1。
标签: java hibernate enums annotations mapping