Cześć,
Mam w swojej aplikacji dwie Klasy encyjne Account i Client połączone ze sobą za pomocą relacji OneToOne - obie mają wspólne ID (UUID). Encja Client posiada także pole typu NumberType, które jest inną encją (relacja ManyToOne). To właśnie to pole powoduje problemy podczas mapowania - jeżeli zakomentuję mapowanie kolumny, to wszystko jest ok. W przeciwnym wypadku, obiekt typu Account ma pole client ustawione na null. Co ciekawe występuje to tylko w przypadku,użytkowników stawionych do bazy za pomocą INSERT INTO. Gdy tworzę konto poprzez aplikację, problem nie występuje.
Kolumna number_type jest NULLABLE.
Client.java
@Id
@NotNull
private UUID id;
@NotNull
@Size(max = 64)
@Column(name = "email")
private String email;
@Size(max = 36)
@Column(name = "name")
private String name;
@Size(max = 36)
@Column(name = "address")
private String address;
@Size(max = 16)
@Column(name = "city")
private String city;
@Size(max = 6)
@Column(name = "post_code")
private String postCode;
@Size(max = 15)
@Column(name = "personal_identity_number")
private String personalIdentityNumber;
// @JoinColumn(name = "number_type_id", referencedColumnName = "id")
// @ManyToOne(optional = false)
// private NumberType numberType;
@OneToMany(cascade = CascadeType.REMOVE, mappedBy = "client")
private List<Details> details;
@MapsId
@NotNull
@JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false)
@OneToOne(optional = false)
private Account account;
@OneToMany(cascade = CascadeType.REMOVE, mappedBy = "clientId")
private List<Article> articleList;
@OneToMany(cascade = CascadeType.REMOVE, mappedBy = "clientId")
private List<BankAccount> bankAccountList;
@NotNull
@Column(name = "version")
@Version
private Long version;
Account.java
Id
@NotNull
@GenericGenerator(name = "uuid", strategy = "uuid2")
@GeneratedValue(generator = "uuid")
@Column(name = "id", unique = true, nullable = false)
@Type(type="pg-uuid")
private UUID id;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 20)
@Column(name = "login")
private String login;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 64)
@Column(name = "password")
private String password;
@Basic(optional = false)
@NotNull
@Column(name = "active")
private boolean active;
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE}, orphanRemoval = true,
mappedBy = "accountId")
@OptimisticLock(excluded = false)
@NotNull
private List<AccessLevel> accessLevelList;
@OneToOne(cascade = {CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE}, mappedBy = "account")
@PrimaryKeyJoinColumn
private Client client;
@NotNull
@Column(name = "version")
@Version
private Long version;
EDIT:
Lista Account pobrana z zakomentowaną kolumną number_type:
Lista Account wraz z kolumną NumberType: