Одна таблица для всех типов перечислений в Hibernate - PullRequest
1 голос
/ 03 августа 2011

У меня есть класс, скажем, сотрудник, как указано ниже;

public class Employee{
    ... Other attributes ...
    @Column @Enumerated(EnumType.Ordinal)
    private Gender gender;

    @Column @Enumerated(EnumType.Ordinal)
    private EmployeeType employeeType;
    ... Getters & Setters ...
}

Моя таблица сотрудников выглядит примерно так.

Employee{
    ... other columns ....
    gender int,
    employeetype int,
    ...
}

и у меня есть поиск по общей таблице поиска

Lookups{
    id long,
    lookName String,
    lookId int,
    lookValue String
}

Я хочу, чтобы Genders и EmployeeTypes были сохранены в таблице поиска с помощью hibernate следующим образом: Как я могу это сделать;

+--+-------------+---------+------------+ 
|ID|LOOKUPNAME   |LOOKUPID | LOOKUPVALUE|
+--+-------------+---------+------------+
+--+-------------+---------+------------+
|1 | GENDER      | 1       | MALE       |
+--+-------------+---------+------------+ 
|2 | GENDER      | 2       | FEMALE     |
+--+-------------+---------+------------+
|3 | EMPLOYEETYPE| 1       | TEAM MEMBER|
+--+-------------+---------+------------+
|4 | EMPLOYEETYPE| 2       | TEAM LEADER|
+--+-------------+---------+------------+
|5 | EMPLOYEETYPE| 3       | MANAGER    | 
+--+-------------+---------+------------+    

Ответы [ 3 ]

0 голосов
/ 03 августа 2011

Я понимаю, что вы хотите хранить все свои константы / перечисления в одной таблице только автоматически.

Для этого у вас может быть

  • Некоторый файл XML / файла свойств, который будет загружен при запуске сервера для чтения этих данных.
  • Класс, который будет читать свойство / XML-файл при запуске сервера и проверять, существуют ли данные поиска или нет.
    • Если нет, то данные в БД сохранятся.
    • Если данные есть, установите какой-либо флаг в БД.Если этот флаг имеет значение true, класс запуска не будет повторно вызывать проверку при следующем запуске сервера.

Таким образом, класс запуска может проверять данные при запуске и вставлять их.если его там нет.

0 голосов
/ 28 сентября 2011

возможно, вы могли бы сложить их следующим образом и сохранить их?

import java.util.*;
enum Gender {
    male, female
}
enum EmployeeType {
    member, leader, manager
}
class Lookups {
    public String toString() {
        return id + " " + lookName + " " + lookId + " " + lookValue;
    }
    private Lookups(Enum e) {
        id = ++n;
        lookName = e.getClass().getName();
        lookId = e.ordinal() + 1;
        lookValue = e.name();
    }
    private static void create(Enum e) {
        for (Object o : e.getDeclaringClass().getEnumConstants())
            lookups.add(new Lookups((Enum) o));
    }
    final long id;
    final String lookName;
    final int lookId;
    final String lookValue;
    static long n;
    static Set<Lookups> lookups = new LinkedHashSet<Lookups>();
    static {
        create(Gender.values()[0]);
        create(EmployeeType.values()[0]);
    }
}
public class Main {
    public static void main(String[] args) {
        for (Lookups lookups : Lookups.lookups)
            System.out.println(lookups);
    }
}
0 голосов
/ 03 августа 2011

Создать класс Lookups. Затем для полей Gender и EmployeeType класса Employee замените их полем поиска. Затем удалите перечисленные аннотации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...