mappedBy ссылается на неизвестное целевое свойство объекта - PullRequest
62 голосов
/ 25 октября 2010

У меня проблема с настройкой отношения один ко многим в моем аннотированном объекте.

У меня есть следующее:

@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;

что я тут делаю неправильно

Ответы [ 2 ]

110 голосов
/ 25 октября 2010

Атрибут mappedBy ссылается на customer, а свойство mCustomer, следовательно, сообщение об ошибке. Так что либо измените ваше отображение на:

/** The collection of stores. */
@OneToMany(mappedBy = "mCustomer", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Collection<Store> stores;

Или измените свойство объекта на customer (что я и сделал бы).

Ссылка mappedBy указывает на то, что «перейдите к свойству bean-компонента с именем« customer », чтобы найти конфигурацию».

1 голос
/ 21 мая 2019

Я знаю, что ответ @ Pascal Thivent решил проблему.Я хотел бы добавить немного больше к его ответу другим, кто может просматривать эту ветку.

Если вы похожи на меня в первые дни обучения и осознания концепции использования аннотации @OneToMany со свойством mappedBy, это также означает, что другая сторона, удерживающая @ManyToOne аннотация с @JoinColumn является «владельцем» этого двунаправленного отношения.

Кроме того, mappedBy принимает имя экземпляра (mCustomer в этом примере)переменной Class в качестве входных данных, а не Class-Type (ex: Customer) или имени объекта (Ex: customer).

БОНУС: Также обратите внимание на свойство orphanRemoval аннотации @OneToMany.Если для него установлено значение true, то при удалении родителя в двунаправленном отношении Hibernate автоматически удаляет его потомков.

...