Проблема в том, что поле address
будет сопоставлено столбцу с именем address
в MySQL, а столбцы базы данных могут содержать только одно значение.
Решение заключается в создании отношения один ко многим, что означает, что вам нужна отдельная таблица node_address
рядом с таблицей node
, которая содержит как минимум поля node_id
и address
.
Теперь для отображения JPA вы можете использовать полное отображение @OneToMany
/ @ManyToOne
, но в этом случае использование @ElementCollection
может быть более интересным:
@Entity
@XmlRootElement(name = "node")
public class Node {
@Id
private int id;
private String name;
@ElementCollection
@CollectionTable(
name="NODE_ADDRESS",
joinColumns=@JoinColumn(name="NODE_ID")
)
@Column(name = "ADDRESS")
private List<String> address;
// Getters + Setters
}
Поскольку Hibernate (поставщик JPA по умолчанию) не может сопоставляться с массивами, необходимо использовать List<String>
для поля address
. Если вам это не нравится, вам придется создать несколько классов, один для отображения XML, а другой для отображения JPA.
Примечание : вам не хватает сопоставления для вашего элемента, поэтому вам также придется создать класс MainNode.