Сохранить непостоянный идентификатор объекта в JPA (Hibernate) - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть статический класс, такой как:

public class Sex{

private final int code;
private final String status;

public static final int TOTAL = 3;

private Sex(int c, String s) {
code = c;
status = s;
}

public static final Sex UNDEFINED = new Sex(1, "UNDEFINED");
public static final Sex MALE = new Sex(2, "MALE");
public static final Sex FEMALE = new Sex(3, "FEMALE");
private static final Sex[] list = { UNDEFINED, MALE, FEMALE };

public int getCode() {
return code;
}

public String getStatus() {
return status;
}

public static Sex fromInt(int c) {
if (c < 1 || c > TOTAL)
throw new RuntimeException("Unknown code for fromInt in Sex");
return list[c-1];
}

public static List getSexList() {
return Arrays.asList(list);
}
}

И у меня есть класс сущностей

@Entity
@Table(name="person")

public class Person{

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private long id;// setter/getter omitted

    private Sex sex;
    public final Sex getSex() {
    return this.sex;
    }
    public final void setSex(final Sex argSex) {
    this.sex = argSex;
    }
}

Я хочу сохранить sex_id в базе данных в виде таблицы. Но setter / getter должен быть таким, как указано, потому что я хочу написать свой код как -

Person person = new Person();
person.setSex(Sex.MALE);
Dao.savePerson(person);

Как аннотировать Sex с помощью JPA?

Ответы [ 2 ]

4 голосов
/ 07 декабря 2011

Поскольку вы не хотите создавать новый экземпляр Sex в своей базе данных, почему бы вам не использовать enum вместо class для Sex?

Если вы это сделаете, вам просто нужно будет пометить свой атрибут Sex с помощью @Enumerated(EnumType.STRING) в классе Person. Полный пример здесь (или просто Google, и вы найдете много)

1 голос
/ 07 декабря 2011

Почему бы не использовать вместо этого перечислитель Sex, а вместо этого использовать @Enumerated?

 @Enumerated(EnumType.STRING)
   Sex sex
...