[英]Hibernate keeps dropping/creating tables when EntityManagerFactory is created
[英]Hibernate keeps creating tables for my enums
我有兩個不同的枚舉,它們位於兩個不同的表中(它們具有相同的結構,但含義不同)。
這是我的第一個名為 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" />
它按預期工作,它不會創建新的“類型”表。 但是,如果沒有,即使你已經有了我的類型表,它也會創建這個空表。
我映射錯了什么?
首先,enum 用於常量值.. 如果你像這樣把它放在表中,還不如創建一個類..
@Entity
@Data
@Accessors(chain = true)
public class FirstEnum {
@Id
@NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int value;
@Column(name = "team")
private String team;
@Column(name = "desc")
private String dec;
@Column(name = "days")
private int days;
}
枚舉功能用於在您的類中具有恆定的業務邏輯.. 所以也許您可以在沒有數據庫的情況下定義枚舉..
public enum SecondEnum {
DO_THINGS(1, "AB", "Other other thins", 2),
OTHER_THINGS(2, "CD", "More and more thingsS", 3);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.