MappedBy ссылается на неизвестное свойство целевого объекта
У меня возникла проблема с настройкой отношения "один ко многим" в моем аннотированном объекте.
У меня есть следующее:
@MappedSuperclass
public abstract class MappedModel
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id",nullable=false,unique=true)
private Long mId;
то это
@Entity
@Table(name="customer")
public class Customer extends MappedModel implements Serializable
{
/**
*
*/
private static final long serialVersionUID = -2543425088717298236L;
/** The collection of stores. */
@OneToMany(mappedBy = "customer", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Collection<Store> stores;
и этот
@Entity
@Table(name="store")
public class Store extends MappedModel implements Serializable
{
/**
*
*/
private static final long serialVersionUID = -9017650847571487336L;
/** many stores have a single customer **/
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn (name="customer_id",referencedColumnName="id",nullable=false,unique=true)
private Customer mCustomer;
что я делаю неправильно здесь
Ответы
Ответ 1
Атрибут mappedBy
ссылается на customer
, а свойство mCustomer
, следовательно, появляется сообщение об ошибке. Поэтому либо измените свое отображение на:
/** The collection of stores. */
@OneToMany(mappedBy = "mCustomer", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Collection<Store> stores;
Или измените свойство entity на customer
(это то, что я бы сделал).
Ссылка mappedBy указывает на "Идите посмотреть на свойство bean с именем" customer "на то, что у меня есть коллекция, чтобы найти конфигурацию".
Ответ 2
Я знаю, что ответ @Pascal Thivent решил проблему. Я хотел бы добавить немного больше к его ответу другим, кто может просматривать эту ветку.
Если вы похожи на меня в первые дни изучения и изучения концепции использования аннотации @OneToMany
со свойством ' mappedBy
', это также означает, что другая сторона, содержащая аннотацию @ManyToOne
с @JoinColumn
является ' владелец этого двунаправленного отношения.
Кроме того, mappedBy
принимает имя экземпляра (в данном примере mCustomer
) переменной Class в качестве входных данных, а не Class-Type (например, Customer) или имя объекта (например, customer).
БОНУС: Кроме того, обратите внимание на orphanRemoval
свойство @OneToMany
аннотации. Если для него установлено значение true, то при удалении родителя в двунаправленном отношении Hibernate автоматически удаляет его дочерние элементы.