В моей базе данных есть поле VARCHAR, а значение этого поля - val1,val2,val3.
Можно ли установить это в атрибут ArrayList<String> объекта с использованием запятой в качестве разделителя разделителя?
В моей базе данных есть поле VARCHAR, а значение этого поля - val1,val2,val3.
Можно ли установить это в атрибут ArrayList<String> объекта с использованием запятой в качестве разделителя разделителя?
Если вы используете JPA 2.1, вы можете создать AttributeConverter:
@Converter
public class StringListConverter implements AttributeConverter<List<String>, String> {
@Override
public String convertToDatabaseColumn(List<String> list) {
// Java 8
return String.join(",", list);
// Guava
return Joiner.on(',').join(list);
}
@Override
public List<String> convertToEntityAttribute(String joined) {
return new ArrayList<>(Arrays.asList(joined.split(",")));
}
}
Вы можете использовать этот конвертер в своей сущности:
@Column
@Convert(converter = StringListConverter.class)
private List<String> strings;
Для до JPA 2.1 вы можете сделать это вручную:
@Entity
private MyEntity {
...
private String strings;
public List<String> getStrings() {
return Arrays.asList(strings.split(","));
}
public void setStrings(List<String> list) {
strings = String.join(",", list);
}
}
Да, это возможно.
С Hibernate 4.3.x + вы можете определить AttributeConverter, хотя я уверен, что это не будет работать для ранних версий Hibernate из-за типа List. См. Это для примера: http://www.thoughts-on-java.org/jpa-21-how-to-implement-type-converter/
Другой способ сделать эту работу - реализовать пользовательский UserType и аннотировать поле/получатель с помощью org.hibernate.annotations.Type. Вот хорошая запись этого примера: http://blog.xebia.com/understanding-and-writing-hibernate-user-types/
Другим способом, который совместим с JPA, является наличие двух полей: List, аннотированных с помощью javax.persistence.Transient и String, но затем вы управляете синхронизацией состояния между этими двумя полями в PrePersist и PreUpdate слушатели сами. Вот пример использования слушателей: http://alexandregama.org/2014/03/23/entity-listeners-and-callback-methods-jpa/