Две @OneToOne Hibernate аннотации в одном Entity

82
13 марта 2021, 16:10

Я пытаюсь написать запрос который будет выдавать все Entity из бд которые проходят фильтрацию, однако у меня возникает конфликт так-как я использую в одном Entity два других Entity используя аннотацию @OneToOne

@NamedQueries({
        @NamedQuery(name = Vote.DELETE, query = "DELETE FROM Vote v WHERE v.id=:id AND v.user.id=:userId"),
        @NamedQuery(name = Vote.GET_ALL, query = "SELECT v FROM Vote v WHERE v.user.id=:userId ORDER BY v.date")
})
@Entity
@Table(name = "user_votes", uniqueConstraints = @UniqueConstraint(columnNames = {"user_id", "date"}, name = "users_votes_unique_date_idx"))
public class Vote extends AbstractBaseEntity {
    public static final String DELETE = "Vote.delete";
    public static final String GET_ALL = "Vote.getAll";
    @JoinColumn(name = "user_id", foreignKey = @ForeignKey(name = "global_seq", foreignKeyDefinition = "START WITH 100"))
    @OneToOne(cascade = CascadeType.ALL)
    @Null
    private User user;
    @JoinColumn(name = "restaurant_id", foreignKey = @ForeignKey(name = "global_seq", foreignKeyDefinition = "START WITH 100"))
    @OneToOne(cascade = CascadeType.ALL)
    @Null
    private Restaurant restaurant;
    @Column(name = "date", nullable = false, columnDefinition = "TIMESTAMP DEFAULT now()")
private LocalDateTime date;

Так-же в классе есть конструкторы (пустой, для клонирования и тот, который принимает все параметры), сеттеры и геттеры всех полей и toString.

При попытке создать namedQuery с параметрами (Vote.GET_ALL, Vote.class) вылетает ошибка

javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.train4game.munoon.model.Restaurant

Думал решить проблему с помощью LEFT JOIN FETCH но он принимает только одно поле, мне нужно два.

Answer 1

Вопрос решил добавлением двух аннотаций

@JoinColumn(name = "restaurant_id", foreignKey = @ForeignKey(name = "global_seq", foreignKeyDefinition = "START WITH 100"))
@OneToOne(fetch = FetchType.LAZY)
@Fetch(FetchMode.JOIN)
@Null
private Restaurant restaurant;
READ ALSO
Jax-rs CRUD. Проблема с ошибкой Method Not Allowed

Jax-rs CRUD. Проблема с ошибкой Method Not Allowed

Ошибка: HTTP Status 405 - Method Not Allowed

114
Could not get unknown property 'srcDir' for main classes of type org.gradle.api.internal.tasks.DefaultSourceSetOutput

Could not get unknown property 'srcDir' for main classes of type org.gradle.api.internal.tasks.DefaultSourceSetOutput

При попытке открыть GDX-проект, мне пишется: Could not get unknown property 'srcDir' for main classes of type orggradle

108
intellij idea не может скачать зависимость javax.servlet.servlet:servlet-api:3.0.1

intellij idea не может скачать зависимость javax.servlet.servlet:servlet-api:3.0.1

intellij idea не может скачать зависимость javaxservlet

78
Проверить появление элемента JS

Проверить появление элемента JS

Всем привет, как в js сделать проверку на появление элемента на странице?

95