注釈付きオブジェクトに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;
ここで間違っていることは何ですか
mappedBy
属性はcustomer
を参照していますが、プロパティはmCustomer
であるため、エラーメッセージです。したがって、マッピングを次のいずれかに変更します。
/** The collection of stores. */
@OneToMany(mappedBy = "mCustomer", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Collection<Store> stores;
または、エンティティプロパティをcustomer
に変更します(これは私が行うことです)。
MappedBy参照は、「構成を見つけるためにコレクションを持っているものの「customer」という名前のBeanプロパティーを調べてください」と示しています。
@ Pascal Thivent による答えが問題を解決したことは知っています。このスレッドをサーフィンしているかもしれない他の人への彼の答えにもう少し付け加えたいと思います。
「mappedBy
」プロパティで@OneToMany
アノテーションを使用するという概念を学び、頭を包む最初の頃の私と同じなら、それは@ManyToOne
アノテーションで@JoinColumn
アノテーションを保持している反対側がこの双方向の関係の「所有者」。
また、mappedBy
は、入力としてClass変数のインスタンス名(この例ではmCustomer
)を受け取り、 Class-Type(ex:Customer)またはエンティティ名(Ex:customer)ではありません。
ボーナス:また、@OneToMany
アノテーションのorphanRemoval
プロパティを調べます。 trueに設定されている場合、双方向の関係で親が削除されると、Hibernateはその子を自動的に削除します。