programing

mappedBy 알 수 없는 대상 엔티티 속성

newsource 2022. 10. 26. 21:08

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