簡體   English   中英

三個實體類的一對多和多對一映射中的問題

[英]Issues in one-to-many and many-to-one mapping for three entity classes

我有三個實體類CountryStateCity 現在我試圖顯示屬於特定 state 的城市和屬於特定國家的州。 但我面臨一個錯誤,比如

org.springframework.dao.DataAccessResourceFailureException:
Could not create JPA EntityManager;
nested exception is org.hibernate.AnnotationException:
@OneToOne or @ManyToOne on com.region.model.State.cities reference
an unknown entity: java.util.List. 

請幫助我完成三個表的一對多和多對一映射。

package com.region.model;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SecondaryTable;
import javax.persistence.Table;
import javax.persistence.Transient;

import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
@Entity
@Table(name = "country")
public class Country {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column
    private Integer country_id;
    @Column
    private String country_name;
//  @Column
//  private String status="active";
    @Transient
    private String statusCode;
    @Transient
    private String statusmessage;
    
    @OneToMany(targetEntity=State.class, mappedBy="country",cascade=CascadeType.ALL, fetch = FetchType.LAZY)    
     @JsonBackReference
    private List<State> states;
    public Country() {

    }
    public Integer getCountry_id() {
        return country_id;
    }

    public void setCountry_id(Integer country_id) {
        this.country_id = country_id;
    }

    public String getCountry_name() {
        return country_name;
    }
    public void setCountry_name(String country_name) {
        this.country_name = country_name;
    }
//  public String getStatus() {
//      return status;
//  }
//  public void setStatus(String status) {
//      this.status = status;
//  }
    public String getStatusCode() {
        return statusCode;
    }
    public void setStatusCode(String statusCode) {
        this.statusCode = statusCode;
    }
    public String getStatusmessage() {
        return statusmessage;
    }
    public void setStatusmessage(String statusmessage) {
        this.statusmessage = statusmessage;
    }

    public List<State> getStates() {
        return states;
    }

    public void setStates(List<State> states) {
        this.states = states;
    }
    
}

package com.region.model;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
@Entity
@Table(name = "state")
public class State {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column
    private Integer sk_state_id;
    @Column
    private String state_name;
    @Column
    private String country_id;
//  @Column
//  private String status="active";
    @Transient
    private String statusCode;
    @Transient String statusMessage;    
    @ManyToOne()
    @JoinColumn(name="country_id", referencedColumnName = "country_id", insertable = false, updatable = false)    
    @JsonManagedReference
    @OneToMany(targetEntity=City.class, mappedBy="state",cascade=CascadeType.ALL, fetch = FetchType.LAZY)    
    private List<City>cities;
    private Country country;
    public State() {
    }
    public Integer getSk_state_id() {
        return sk_state_id;
    }
    public void setSk_state_id(Integer sk_state_id) {
        this.sk_state_id = sk_state_id;
    }
    public String getState_name() {
        return state_name;
    }
    public void setState_name(String state_name) {
        this.state_name = state_name;
    }
    public String getCountry_id() {
        return country_id;
    }
    public void setCountry_id(String country_id) {
        this.country_id = country_id;
    }
//  public String getStatus() {
//      return status;
//  }
//  public void setStatus(String status) {
//      this.status = status;
//  }
    public String getStatusCode() {
        return statusCode;
    }
    public void setStatusCode(String statusCode) {
        this.statusCode = statusCode;
    }
    public String getStatusMessage() {
        return statusMessage;
    }
    public void setStatusMessage(String statusMessage) {
        this.statusMessage = statusMessage;
    }
    public Country getCountry() {
        return country;
    }
    public void setCountry(Country country) {
        this.country = country;
    }
    public List<City> getCities() {
        return cities;
    }
    public void setCities(List<City> cities) {
        this.cities = cities;
    }
    
    
}

package com.region.model;
import java.lang.annotation.Repeatable;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
@Entity
@Table(name = "city")
public class City {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column
    private Integer sk_city_id;
    @Column
    private String city_name;
    @Column
    private String state_id;
    @Column
    private String country_id;
    @Transient
    private String statusCode;
    @Transient
    String statusMessage;
    @ManyToOne(targetEntity = State.class)
    @JoinColumn(name="state_id", referencedColumnName ="sk_state_id", insertable = false, updatable = false)    
    private State state;
    private Country country;
    //private List<State>states;
    public City() {
        }
    public Integer getSk_city_id() {
        return sk_city_id;
    }
    public void setSk_city_id(Integer sk_city_id) {
        this.sk_city_id = sk_city_id;
    }
    public String getCity_name() {
        return city_name;
    }
    public void setCity_name(String city_name) {
        this.city_name = city_name;
    }
    public String getState_id() {
        return state_id;
    }
    public void setState_id(String state_id) {
        this.state_id = state_id;
    }
    public String getCountry_id() {
        return country_id;
    }
    public void setCountry_id(String country_id) {
        this.country_id = country_id;
    }
    public String getStatusCode() {
        return statusCode;
    }
    public void setStatusCode(String statusCode) {
        this.statusCode = statusCode;
    }
    public String getStatusMessage() {
        return statusMessage;
    }
    public void setStatusMessage(String statusMessage) {
        this.statusMessage = statusMessage;
    }
    public Country getCountry() {
        return country;
    }
    public void setCountry(Country country) {
        this.country = country;
    }
    public State getState() {
        return state;
    }
    public void setState(State state) {
        this.state = state;
    }
    
    @Override
    public String toString() {
        return "City [sk_city_id=" + sk_city_id + ", city_name=" + city_name + ", state_id=" + state_id
                + ", country_id=" + country_id + ", statusCode=" + statusCode + ", statusMessage=" + statusMessage
                + "]";
    }
//  public List<State> getStates() {
//      return states;
//  }
//  public void setStates(List<State> states) {
//      this.states = states;
//  }
    
    
}

mappedBy 僅在 2 個類之間的關系中使用一次,對於要為兩者定義關系的 class。 So in the class Countries you probably don't need mappedBy at all, in the class Cities, you should put mappedBy="state", and in the class State it would make sense to put mappedBy="country"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM