@OneToOne с общим ключом между тремя таблицами - PullRequest
0 голосов
/ 27 мая 2018

У меня есть три объекта, которые имеют один и тот же первичный ключ.Между объектами Account и Provider существует двунаправленное отношение один-к-одному, где ранее названные объекты имеют общий первичный ключ , но в то же времясущность Provider делит первичный ключ с сущностью GlobalRating , где между ними существует однонаправленная связь.Должен сказать, что я использую hibernate с MySQL в качестве базы данных:

Счётная запись:

@Entity
@Table(name="account")
@Getter
@Setter
@JsonIdentityInfo(
          generator = ObjectIdGenerators.PropertyGenerator.class, 
          property = "email")
public class Account implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO, generator="native")
    @GenericGenerator(name = "native", strategy = "native")
    @Column(name="id")
    private int id;

    @OneToOne(mappedBy = "account", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
    private Provider provider;
}

Субъект-провайдер:

@Entity
@Table(name="provider")
@Getter
@Setter
@JsonIdentityInfo(
          generator = ObjectIdGenerators.PropertyGenerator.class, 
          property = "providerId")
public class Provider implements Serializable, Comparable<Provider>{

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="pk_account$provider")
    @GeneratedValue(generator="native")
    @GenericGenerator(name="native", strategy="foreign",parameters=@Parameter(name="property", value="account"))
    private int providerId;

    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @PrimaryKeyJoinColumn
    private Account account;

    @OneToOne(fetch=FetchType.LAZY, cascade = CascadeType.ALL, optional = false)
    @PrimaryKeyJoinColumn
    private GlobalRating globalRating;
}

GlobalRating Entity:

@Entity
@Table(name="global_rating")
@Getter
@Setter
public class GlobalRating implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="pk_provider$global_rating")
    @GeneratedValue(generator="native")
    @GenericGenerator(name="native", strategy="foreign",parameters=@Parameter(name="property", value="globalRating"))
    private int globalRatingId;
}

Проблема, с которой я сталкиваюсь при создании учетной записи с Provider и GlobalRating .Я уверен, что двунаправленное сопоставление между Account и Provider работает, но проблема заключается в сопоставлении сущности Provider и сущности GlobalRating .Я пробовал это несколькими способами, но это не работает.Итак, как этот случай правильно отображается в hibernate?

Я ценю, что вы можете помочь мне с этим.

...