Сохранение целочисленного массива с использованием Spring Data JPA - PullRequest
0 голосов
/ 15 ноября 2018

Я использую данные весны jpa с hibernate и postgres.Я пытаюсь сохранить целочисленный массив в столбце.Я использую библиотеку vlad mihaceas для сохранения массива в postgresql.Сущность выглядит следующим образом: -

@Type(type = "int-array")
@Column(name = "location", columnDefinition = "integer[]")  
private Integer[] locations;    

Соответствующий объект местоположения:

@Entity
@Table(name = "location_master")
public class Location implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @Column(name = "location_name")
    private String locationName;
}

Идентификаторы местоположения сохраняются в БД.Но я не могу отобразить в поле тимьяна.

<tr>
    <td>Selected Locations</td>
    <td>[[${office.locations[0].locationName}]]</td>
</tr>

Возникла следующая ошибка: -

org.springframework.expression.spel.SpelEvaluationException: EL1008E: Свойствоили поле 'locationName' не может быть найдено для объекта типа 'java.lang.Integer' - может быть, не является общедоступным или недействительным?

1 Ответ

0 голосов
/ 24 ноября 2018

org.springframework.expression.spel.SpelEvaluationException: EL1008E: Свойство или поле 'locationName' не может быть найдено для объекта типа 'java.lang.Integer' - возможно, не является общедоступным или недействительным?

Ошибка не имеет ничего общего с использованием int-array проекта hibernate-types .

Сообщение об ошибке относится к языку выражений Spring, который вы использовали дляустановка locationName, являющегося свойством String.

[[${office.locations[0].locationName}]]

Свойство locations является Integer[], но вы рассматривали его как массив Location.

То, что вы хотите, это @OneToMany List<Location> вместо:

@OneToMany(mappedBy="office", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Location> locations = new ArrayList<>();  

и @ManyToOne ассоциация в Location:

@ManyToOne(fetch = FetchType.LAZY)
private Office office;

Проверьте эту статью для более подробной информации о наилучшем способе использования @OneToMany ассоциации.

...