JPA - nie mapuje relacji OneToOne

0

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:
title

Lista Account wraz z kolumną NumberType:
title

2

A Zobacz:
http://stackoverflow.com/questions/6833370/jpa-onetoone-with-shared-id-can-i-do-this-better

(IMO jak masz @PrimaryKeyJoinColumn - to nie może być jednocześnie mappedBy (,ale nigdzie tego nie wyczytałem))

0

Problem rozwiązany:

     @JoinColumn(name = "number_type_id", referencedColumnName = "id")
     @ManyToOne(optional = false)
     private NumberType numberType;

Zostało zamienione na:

    @JoinColumn(name = "number_type_id", referencedColumnName = "id")
    @ManyToOne
    private NumberType numberType;

Dzięki @jarekr000000 za próbę pomocy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1