JPA отображают набор Перечислений

Это зависит от контекста

. Когда вы рассматриваете свою команду как список игроков, вы проецируете «идею» команды шара ноги на один аспект: вы сокращаете «команду» до людей, которых вы видите на поле. Эта проекция верна только в определенном контексте. В другом контексте это может быть совершенно неправильно. Представьте, что вы хотите стать спонсором команды. Поэтому вам нужно поговорить с менеджерами команды. В этом контексте команда прогнозируется в списке своих менеджеров. И эти два списка обычно не перекрываются очень сильно. Другие контексты - текущие и прежние игроки и т. Д.

Нечеткая семантика

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

Классы расширяемы

Когда вы используете класс только с одним членом (например, IList activePlayers), вы можете использовать имя участника (и, кроме того, его комментарий), чтобы сделать контекст понятным. Когда есть дополнительные контексты, вы просто добавляете дополнительный член.

Классы сложнее

В некоторых случаях может быть излишним создание дополнительного класса. Каждое определение класса должно быть загружено через загрузчик классов и будет кэшироваться виртуальной машиной. Это требует производительности и памяти во время выполнения. Когда у вас есть очень специфический контекст, может быть, стоит подумать о футбольной команде как о списке игроков. Но в этом случае вы действительно должны использовать только IList , а не класс, полученный из него.

Заключение / соображения

Когда у вас очень специфический контекст, все в порядке рассматривать команду как список игроков. Например, внутри метода вполне нормально писать

IList<Player> footballTeam = ...

При использовании F # может даже быть ОК, чтобы создать аббревиатуру типа

type FootballTeam = IList<Player>

. Но когда контекст более широкий или даже неясный, вы не должны этого делать. Это особенно важно, когда вы создаете новый класс, где неясно, в каком контексте он может использоваться в будущем. Предупреждающий знак - это когда вы начинаете добавлять дополнительные атрибуты в свой класс (имя команды, тренера и т. Д.). Это явный признак того, что контекст, в котором будет использоваться класс, не является фиксированным и изменится в будущем. В этом случае вы не можете рассматривать команду как список игроков, но вы должны моделировать список игроков (в настоящее время активных, а не травмированных и т. Д.) В качестве атрибута команды.

81
задан Greg Mattes 21 December 2009 в 16:12
поделиться

2 ответа

использование В спящем режиме, можно сделать

@CollectionOfElements(targetElement = InterestsEnum.class)
@JoinTable(name = "tblInterests", joinColumns = @JoinColumn(name = "personID"))
@Column(name = "interest", nullable = false)
@Enumerated(EnumType.STRING)
Collection<InterestsEnum> interests;
108
ответ дан 24 November 2019 в 09:33
поделиться

Наборы в JPA относятся к one-many или many-many отношениям, и они могут только содержать другие объекты. Извините, но необходимо было бы обернуть те перечисления в объект. Если бы Вы думаете об этом, Вам были бы нужны своего рода поле ID и внешний ключ, чтобы хранить эту информацию так или иначе. Это - то, если Вы не делаете что-то сумасшедшее как хранилище разделенный запятыми список в Строке (не делайте этого!).

0
ответ дан cletus 24 November 2019 в 09:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: