【问题标题】:ManyToOne causes not mapped to a single propertyManyToOne 导致未映射到单个属性
【发布时间】:2013-07-04 13:06:16
【问题描述】:

我收到以下异常:

创建会话工厂失败 object.org.hibernate.AnnotationException: 引用的ColumnNames(wojid_fk, powid_fk, id, rodzgm_fk) 的 com.darek.Persistance.teryt.Miejscowosc.gmina 引用 com.darek.Persistance.teryt.Gmina 未映射到单个属性

这是我的 Miejscowosc 课:

//imports
(...)

@Entity
@Table(name = "miejscowosc")
public class Miejscowosc {

    public Miejscowosc(int id, String nazwa, boolean nazwazwyczajowa,
            RodzajMiejscowosci rodzmiejsc, Gmina gmina, int idpod, Date stanna) {
        super();
        this.id = id;
        this.nazwa = nazwa;
        this.nazwazwyczajowa = nazwazwyczajowa;
        this.stanna = stanna;
        this.rodzmiejsc = rodzmiejsc;
        this.gmina = gmina;
        this.idpod = idpod;
        }

protected Miejscowosc() {
    super();
}

@Id
@Column(columnDefinition = "MEDIUMINT(7)")
private int id;

@Column(columnDefinition = "MEDIUMINT(7)")
private int idpod;

@Column(columnDefinition = "CHAR(36)")
private String nazwa;

@Column(name = "nazwazwyczajowa", columnDefinition = "BIT", length = 1)
private boolean nazwazwyczajowa;

@Column(columnDefinition = "DATE")
private Date stanna;

@JoinColumn(name = "rodzmiejsc_fk", referencedColumnName = "id")
@ManyToOne
private RodzajMiejscowosci rodzmiejsc;

@JoinColumns({
        @JoinColumn(name = "wojid_fk", referencedColumnName = "wojid_fk"),
        @JoinColumn(name = "powid_fk", referencedColumnName = "powid_fk"),
        @JoinColumn(name = "gmid_fk", referencedColumnName = "id"),
        @JoinColumn(name = "rodzgm_fk", referencedColumnName = "rodzgm_fk") })
@ManyToOne
private Gmina gmina;


//getters and setters
(...)

}

这就是我的 Gmina 课程:

//imports
(...)
@SuppressWarnings("unused")
@Entity
@Table(name = "gmina")
public class Gmina {

public Gmina(int id, String nazwa, String nazwadod, Date stanna) {
    super();
    this.id = id;
    this.nazwadod = nazwadod;
    this.nazwa = nazwa;
    this.stanna = stanna;
}

protected Gmina() {
    super();
}

@Id
@Column(columnDefinition = "SMALLINT")
private int id;

@Column(columnDefinition = "CHAR(50)")
private String nazwadod;

@Column(columnDefinition = "CHAR(36)")
private String nazwa;

@Column(columnDefinition = "DATE")
private Date stanna;

@JoinColumns({
        @JoinColumn(name = "powid_fk", referencedColumnName = "id", insertable = false, updatable = false),
        @JoinColumn(name = "wojid_fk", referencedColumnName = "wojid_fk", insertable = false, updatable = false) })
@ManyToOne
private Powiat powiat;

@ManyToOne
@JoinColumn(name = "rodzgm_fk", referencedColumnName = "id", insertable = false, updatable = false)
private RodzajGminy rodzGm;

//getters and setters
(...)

}

我该如何解决这个问题?为什么会出现这个问题? 提前感谢您的帮助。

编辑:

gmina 表和 miejscowosc 表都有列 wojid_fkpowid_fkrodzgm_fk,这就是为什么我有相同名称的原因。唯一的区别是 gmina 有 id 而 miejscowosc 有 gmid_fkid的外键)

【问题讨论】:

    标签: java mysql hibernate


    【解决方案1】:

    你需要像下面这样使用@JoinColumns

    @JoinColumns({    
      @JoinColumn(name = "first", referencedColumnName = "column_name"),
      @JoinColumn(name = "second", referencedColumnName = "column_name"),
      @JoinColumn(name = "third", referencedColumnName = "column_name")
    })
    

    【讨论】:

    • 不是和@JoinColumns({ @JoinColumn(name = "wojid_fk", referencedColumnName = "wojid_fk"), @JoinColumn(name = "powid_fk", referencedColumnName = "powid_fk"), @JoinColumn(name = "gmid_fk", referencedColumnName = "id"), @JoinColumn(name = "rodzgm_fk", referencedColumnName = "rodzgm_fk") })一样吗? gmina 表和 miejscowosc 表都有列 wojid_fkpowid_fkrodzgm_fk,这就是我使用它们名称相同的原因。唯一的区别是 gmina 有 id 而 miejscowosc 有 gmid_fkid 的外键)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2014-02-27
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多