Всегда ли аннотация JPA @ElementCollection создает отношение один ко многим? - PullRequest
0 голосов
/ 29 сентября 2011

Для этого вопроса рассмотрим следующий пример:

@Entity
public class File {
    public static enum Permission { READABLE, WRITEABLE, EXECUTABLE }

    @ElementCollection
    @Enumerated(EnumType.ORDINAL)
    Set<Permission> permissions;

    // Omitted
}

Если предположить, что значения перечисления хранятся в порядковой форме, всегда ли JPA создает дополнительную таблицу для этого набора?Могу ли я изменить это, чтобы это не было отношением «один ко многим», т. Е. Использовать столбец вместо дополнительной таблицы?

Спасибо.

1 Ответ

1 голос
/ 29 сентября 2011
  1. «один ко многим» - это тип объединения сущностей. Это коллекция значений, поэтому она не может быть «один ко многим».
  2. Физически невозможно хранить несколько значений в одном поле в одной строке, поэтому нет, вы не можете заставить это сделать это.
  3. По сути, вы запрашиваете базовое свойство, например private String permissions;. Это будет использовать один столбец в той же таблице.
  4. Если вы хотите упаковать несколько значений в одно значение, например, вручную объединяя все разрешения в строку с разделителями-запятыми, когда Hibernate сохраняет ее, вам нужно записать пользовательский тип пользователя в сделай это.
...