Установите идентификатор по умолчанию для нулевых значений из нескольких дочерних таблиц в jpa Spring Spring для одного ко многим отношениям - PullRequest
0 голосов
/ 17 июня 2020

Я использую postgres и имею модель EAV, это пример сопоставления (не оригинал).

@Entity
public class User {
    @Id
    @Column(name = "id", updatable = false, nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    private Set<UserPropertyValues> userPropertyValues;
}


@Entity
@Table
public class UserPropertyValues {
    @Id
    @Column(name = "id", updatable = false, nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column
    private String value; //Hold actual value of the property

    @ManyToOne
    @JoinColumn(name = "property_id")
    private Property property;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id", nullable = false, insertable = false, updatable = false)
    private User user;
}

@Entity
@Table
public class Property {
    @Id
    @Column(name = "id", updatable = false, nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column
    private String name;
}

Я хочу получить список со всеми именами свойств, даже если свойство не сопоставлен с конкретным пользователем с помощью сущности значения свойства. Есть ли более чистый способ сделать это в Spring JPA HQL с помощью одного запроса?

В настоящее время я использую следующий HQL, но он, очевидно, не дает мне несопоставленных имен свойств пользователя.

select u from User u left join fetch u.propertyValues pv left join fetch pv.properties;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...