Сопоставить идентификатор класса встроенной сущности JPA с идентификатором класса встроенной сущности - PullRequest
0 голосов
/ 29 июня 2018

У меня есть класс:

@Entity
public class A {
    @Embedded
    @AttributeOverride(name = "id", column = @Column(name = "b_id"))
    private B b;
}

В таблице A

есть столбец b_id BIGINT NOT NULL.
@Embeddable
@Entity
public class B {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}

мы получаем ошибку: вызвано: org.hibernate.MappingException: свойство компонента не найдено: id

По сути, нам нужно отобразить B в A, используя id

Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Попробуйте это

    @Entity
    public class A implements Serializable {
    private static final long serialVersionUID = 9154946919235019012L;
    @Embedded
    @AttributeOverride(name = "id", column = @Column(name = "b_id"))
    private B b;
    public A() {
    }

    public A(B b) {
        this.b = b;
    }


    public B getB() {
        return b;
    }

    public void setB(B b) {
        this.b = b;
    }
    }

А вот и класс Б

@Embeddable
@Entity

public class B implements Serializable {
    private static final long serialVersionUID = 5579181803793008928L;
    @Id
    @Column(nullable = false)
    private Long id;

    public B(Long id) {
        this.id=id;
    }
    public B(){

    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }
    }

У вас нет геттеров и сеттеров или дополнительного конструктора, кроме неявного no arg one. Вы должны иметь как конструктор без аргументов, так и методы получения и установки.

0 голосов
/ 29 июня 2018

Я думаю, что проблема с @Id во встроенном классе. Мы не можем использовать во встроенном классе. Попробуйте удалить это? Если вы можете удалить его, попробуйте использовать @EmbeddedId, если вам просто нужно поле id.

...