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;
내가 여기서 뭘 잘못하고 있지?
그mappedBy
속성이 참조 중입니다.customer
이 있는 동안mCustomer
이 에러 메세지가 표시됩니다.따라서 매핑을 다음과 같이 변경합니다.
/** The collection of stores. */
@OneToMany(mappedBy = "mCustomer", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Collection<Store> stores;
또는 엔티티 속성을 다음과 같이 변경합니다.customer
(그게 내가 할 일이야)
mappedBy 참조는 "고객이라는 이름의 bean 속성을 살펴보고 설정을 찾습니다."를 나타냅니다.
@Pascal Tivent의 답변이 문제를 해결했다는 것을 알고 있습니다.나는 이 스레드를 서핑하고 있을 지도 모르는 다른 사람들에 대한 그의 대답에 조금 더 덧붙이고 싶다.
만약 당신이 처음 배운 날과 같다면, 당신의 머리를 사용의 개념에 감싸고 있습니다.@OneToMany
'를 사용한 주석mappedBy
'물건'은 또한 다른 한쪽이 '물건'을 가지고 있다는 것을 의미합니다.@ManyToOne
를 사용한 주석@JoinColumn
이 쌍방향 관계의 '소유자'입니다.
또한.mappedBy
인스턴스 이름(mCustomer
이 예에서는 클래스 변수(예:Customer) 또는 엔티티 이름(예:Customer)이 아닌 입력으로 사용됩니다.
보너스 : 또,orphanRemoval
의 특성@OneToMany
주석입니다.true로 설정되어 있는 경우 쌍방향 관계에서 부모를 삭제하면 휴지 상태가 자동으로 해당 부모를 삭제합니다.
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "USER_ID")
Long userId;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "sender", cascade = CascadeType.ALL)
List<Notification> sender;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "receiver", cascade = CascadeType.ALL)
List<Notification> receiver;
}
public class Notification implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name = "NOTIFICATION_ID")
Long notificationId;
@Column(name = "TEXT")
String text;
@Column(name = "ALERT_STATUS")
@Enumerated(EnumType.STRING)
AlertStatus alertStatus = AlertStatus.NEW;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SENDER_ID")
@JsonIgnore
User sender;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "RECEIVER_ID")
@JsonIgnore
User receiver;
}
mappy="mappy" value"는 알림 모델에서 동일하게 인식됩니다.예를 들어 보겠습니다.
사용자 모델:
@OneToMany(fetch = FetchType.LAZY, mappedBy = "**sender**", cascade = CascadeType.ALL)
List<Notification> sender;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "**receiver**", cascade = CascadeType.ALL)
List<Notification> receiver;
알림 모델:
@OneToMany(fetch = FetchType.LAZY, mappedBy = "sender", cascade = CascadeType.ALL)
List<Notification> **sender**;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "receiver", cascade = CascadeType.ALL)
List<Notification> **receiver**;
사용자 모델 및 알림 필드에 굵은 글씨로 표시했습니다.사용자 모델 mappedBy="sender"는 알림 목록 송신자와 같아야 하며, mappedBy="receiver"는 알림 목록 수신기와 같아야 합니다. 그렇지 않으면 오류가 발생합니다.
언급URL : https://stackoverflow.com/questions/4011472/mappedby-reference-an-unknown-target-entity-property
'programing' 카테고리의 다른 글
jQuery를 사용하여 URL에서 앵커를 가져오려면 어떻게 해야 합니까? (0) | 2022.10.27 |
---|---|
정의된 모든 변수 보기 (0) | 2022.10.27 |
Java 메서드에서 불필요한 반환을 방지하려면 어떻게 해야 합니까? (0) | 2022.10.26 |
JPA 2에서 CriteriaQuery를 사용하여 결과를 카운트하는 방법 (0) | 2022.10.26 |
python의 바이트 배열에 대한 16진수 문자열 (0) | 2022.10.26 |