web-dev-qa-db-ja.com

mappedByは不明なターゲットエンティティプロパティを参照します

注釈付きオブジェクトに1対多の関係を設定する際に問題が発生しています。

私は次のものを持っています:

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

ここで間違っていることは何ですか

62
boyd4715

mappedBy属性はcustomerを参照していますが、プロパティはmCustomerであるため、エラーメッセージです。したがって、マッピングを次のいずれかに変更します。

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

または、エンティティプロパティをcustomerに変更します(これは私が行うことです)。

MappedBy参照は、「構成を見つけるためにコレクションを持っているものの「customer」という名前のBeanプロパティーを調べてください」と示しています。

112
Pascal Thivent

@ Pascal Thivent による答えが問題を解決したことは知っています。このスレッドをサーフィンしているかもしれない他の人への彼の答えにもう少し付け加えたいと思います。

mappedBy」プロパティで@OneToManyアノテーションを使用するという概念を学び、頭を包む最初の頃の私と同じなら、それは@ManyToOneアノテーションで@JoinColumnアノテーションを保持している反対側がこの双方向の関係の「所有者」。

また、mappedByは、入力としてClass変数のインスタンス名(この例ではmCustomer)を受け取り、 Class-Type(ex:Customer)またはエンティティ名(Ex:customer)ではありません。

ボーナス:また、@OneToManyアノテーションのorphanRemovalプロパティを調べます。 trueに設定されている場合、双方向の関係で親が削除されると、Hibernateはその子を自動的に削除します。

1
Dhyanesh