私はJAXBとJPAを使用しています。私は、XMLファイルからデータベースにデータを変換したいと思います。以下に2つのクラスの例を示します。私がJavaオブジェクトにファイルをアンマーシャリングするとき、データを保持するとき、私はaddresエンティティのuser_idに問題があります(空です)。JAXB&JPA。 1対1の双方向関係(空のID)
私はそれをマニュアルに設定するとすべてが問題ありませんが、問題はアンマーシャル中です。
クラスのユーザー
@XmlRootElement(name = "User")
@XmlAccessorType(XmlAccessType.FIELD)
@Entity(name = "EntUser")
public class User implements Serializable {
@XmlTransient
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Long id;
@Column
private String name;
@Column
private String surname;
@XmlElement(name = "Address")
@OneToOne(mappedBy = "User", cascade = CascadeType.ALL)
private Address address;
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
address.setUser(this);
this.address = address;
}
クラス住所
@XmlRootElement(name = "Address")
@XmlAccessorType(XmlAccessType.FIELD)
@Entity(name = "EntAddress")
public class Address implements Serializable {
@XmlTransient
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, nullable = false)
private Long id;
@XmlTransient
@XmlInverseReference(mappedBy = "address")
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
私は手動でオブジェクトを作成すると、すべてが
User user = new User();
user.setName("Jack");
user.setSurname("AAA");
Address address = new Address();
user.setAddress(address);
em.persist(user);
が、アンマーシャリングない
StringReader reader = new StringReader(xml);
JAXBContext contex = JAXBContext.newInstance(User.class);
Unmarshaller unmarshaler = contex.createUnmarshaller();
User user = (User) unmarshaler.unmarshal(reader);
em.persist(user);
中にokです私は、この
user.getAddress().setUser(user);
を使用する場合を除き、
はokです。これをせずにどうすればいいですか?私のXMLはより複雑なので。
ありがとうございます。
AddressクラスのUserメンバーから '@XmlTransient'を削除しようとしましたか? –
私は試しましたが、動作しません – dziorkowsky