J'ai une table nommée job_class qui a fixé des valeurs:Utilisez Enum dans le modèle de domaine (ORM) lorsque la table correspondante a défini des valeurs?
Telle est la définition de la table:
create table job_class (
job_class_code int NOT NULL PRIMARY KEY,
job_class_name varchar(50) NOT NULL,
ext_code varchar(10) NOT NULL
)
Il sera toujours 3 rangs:
insert into job_class values (1, 'HOURLY', 'H')
insert into job_class values (2, 'SALARY', 'S')
insert into job_class values (3, 'EXECUTIVE', 'E')
job_class Table est référencé comme un FK dans employé table:
create table employee (
employee_id bigint NOT NULL PRIMARY KEY,
first_name varchar(50) NOT NULL,
middle_name varchar(50) NULL,
last_name varchar(50) NOT NULL,
job_class_code int NOT NULL FOREIGN KEY REFERENCES job_class (job_class_code)
)
maintenant pour mapper ce tableau dans le modèle de domaine (ORM), généralement je définis une classe de cette façon:
public class JobClass implements java.io.Serializable {
private Integer id;
private String name;
private String extCode;
public Integer getId() { return id; }
public void setId(Integer id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getExtCode() { return extCode; }
public void setId(String extCode) { this.extCode = extCode; }
}
Mais si je définis comme Enum
au lieu:
public enum JobClass {
HOURLY(1,"HOURLY","H"),
SALARY(2,"SALARY","S"),
EXECUTIVE(3,"EXECUTIVE","E");
private Integer id;
private String name;
private String extCode;
private JobClass(Integer id, String name, String extCode) {
this.id = id;
this.name = name;
this.extCode = extCode;
}
public Integer getId() { return id; }
public String getName() { return name; }
public String getExtCode() { return extCode; }
}
Est-ce logique d'utiliser un Enum dans ORM? Je n'ai jamais utilisé un ENUM directement dans ORM avant cela. Est-ce une bonne pratique dans ce cas? Quelles sont les implications Serializable si vous utilisez Enum?
Je suis moins familier avec Java que d'autres langues, mais il devrait être similaire. Une énumération n'est généralement pas construite dynamiquement comme une classe. Vous spécifiez chaque valeur au moment du design. Cela dit, il peut y avoir un moyen (similaire à la réflexion dans .Net) de construire dynamiquement une énumération en mémoire pendant l'exécution, mais ce n'est pas quelque chose qui est normalement fait. Une énumération est construite comme suit: 'public enum MyEnum {Valeur1 = 1, Valeur2 = 2, Valeur3 = 3}' – gmiley