簡體   English   中英

Hibernate 不斷為我的枚舉創建表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM