Если вы хотите быть симпатичным, вы можете сделать:
n = sorted([minN, n, maxN])[1]
Используйте некоторую реализацию JPA 2: она добавляет аннотацию @ElementCollection, аналогичную аннотации Hibernate, которая делает именно то, что вам нужно. Вот один пример здесь .
Edit
Как упоминалось в комментариях ниже, правильная реализация JPA 2 -
javax.persistence.ElementCollection
@ElementCollection
Map<Key, Value> collection;
См .: http://docs.oracle.com/javaee /6/api/javax/persistence/ElementCollection.html[1240 visible
При использовании Быть в спящем режиме реализации JPA я нашел, что просто объявление типа как ArrayList вместо Списка позволяет, в спящем режиме для хранения списка данных.
Очевидно это имеет много недостатков по сравнению с созданием списка объектов Объекта. Никакая ленивая загрузка, никакая способность сослаться на объекты в списке от других объектов, возможно, больше трудности при построении запросов базы данных. Однако, когда Вы имеете дело со списками довольно типов примитивов, которые Вы будете всегда хотеть нетерпеливо выбрать наряду с объектом, тогда этот подход кажется прекрасным мне.
@Entity
public class Command implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long id;
ArrayList<String> arguments = new ArrayList<String>();
}
Согласно Персистентность Java с В спящем режиме
отображающиеся наборы типов значения с аннотациями [...]. Во время записи это не часть стандарта Персистентности Java
, Если Вы использовали, в спящем режиме, Вы могли бы сделать что-то как:
@org.hibernate.annotations.CollectionOfElements(
targetElement = java.lang.String.class
)
@JoinTable(
name = "foo",
joinColumns = @JoinColumn(name = "foo_id")
)
@org.hibernate.annotations.IndexColumn(
name = "POSITION", base = 1
)
@Column(name = "baz", nullable = false)
private List<String> arguments = new ArrayList<String>();
Обновление: Отметьте, это теперь доступно в JPA2.
Этот ответ был сделан pre-JPA2 реализациями при использовании JPA2 см. ответ ElementCollection выше:
Списки объектов в объекте модели обычно считают отношениями "OneToMany" с другим объектом. Однако Строка не является (отдельно) допустимым клиентом Связи "один ко многим", поскольку она не имеет идентификатора.
Так, Вы должны преобразовывать свой список Строк к списку объектов Argument-class JPA, содержащих идентификатор и Строку. Вы могли потенциально использовать Строку в качестве идентификатора, который оставит немного свободного места в Вашей таблице и от удаления поля ID и путем консолидации строк, где Строки равны, но Вы потеряли бы способность заказать аргументы назад в их первоначальный заказ (поскольку Вы не сохранили информации для заказа).
, С другой стороны, Вы могли преобразовать свой список в @Transient и добавить другое поле (argStorage) к Вашему классу, который является любой VARCHAR () или CLOB. Необходимо будет тогда добавить 3 функции: 2 из них являются тем же и должны преобразовать Ваш список Строк в единственную Строку (в argStorage) разграниченный способом, что можно легко разделить их. Аннотируйте эти две функции (что каждый делает то же самое) с @PrePersist и @PreUpdate. Наконец, добавьте третью функцию, которая разделяет argStorage на список Строк снова, и аннотируйте его @PostLoad. Это будет держать Ваш CLOB в курсе со строками каждый раз, когда Вы идете, чтобы сохранить Команду и держать argStorage поле в курсе перед хранением его к DB.
я все еще предлагаю делать первый случай. Это - хорошая практика для реальных отношений позже.
У меня была такая же проблема, поэтому я применил предложенное возможное решение, но в конце концов решил реализовать свои ';' разделенный список String.
поэтому у меня есть
// a ; separated list of arguments
String arguments;
public List<String> getArguments() {
return Arrays.asList(arguments.split(";"));
}
Таким образом, список легко читается / редактируется в таблице базы данных;