org.hibernate.MappingException:复合主键作为另一个表中的外键

时间:2012-11-30 12:39:50

标签: java hibernate jpa hibernate-mapping

我在使用@OneToMany注释引用另一个类中的复合主键时遇到问题。

我的复合主键类如下:

@Entity
@Table(name = "name_entry")
public class NameEntry {,

    @EmbeddedId
    private NameEntryPK id;

    //getters, setters
}

复合Id类是这样的:

@Embeddable
public class NameEntryPK implements Serializable {

    @Column(name = "entry")
    protected String entry;

    @Column(name = "name")
    protected String name;

    //getters, setters
}

这对我来说很清楚,而且工作完美。问题发生在另一个地方。我想要另一个具有NameEntry主键的外键的类。我写过类似的东西:

@Entity    
@Table(name = "content_entry")
public class ContentEntry {

    //id, other columns

    @OneToOne
    @JoinColumns ({
        @JoinColumn(name = "entry_content", referencedColumnName = "entry", insertable = false, updatable = false),
        @JoinColumn(name="title_name", referencedColumnName = "name", insertable = false, updatable = false)
    })
    protected NameEntry nameEntry;

    //getters, setters   
}

根据这个我的例外是:

Invocation of init method failed; nested exception is org.hibernate.MappingException:
Unable to find column with logical name: `entry` in
org.hibernate.mapping.Table(name_entry) and its related supertables and 
secondary tables

根据这个:https://hibernate.onjira.com/browse/HHH-7713?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel我试图用赋予的重音包围列名。但它没有用。

1 个答案:

答案 0 :(得分:2)

我不知道这个问题与列名的情况有关,因为看起来你的映射不正确。您指定的连接列表示存在引用“条目”字段的“entry_content”字段,但您设置引用以使其从“name_entry”变为“content_entry”。因此,它正在寻找ContentEntry类中“entry”字段的映射,但找不到它。我认为你打算放的是“entry”有一个referencedColumnName为“entry_content”。尝试切换它们,看看是否有帮助。

映射本身虽然对我没有多大意义。如果使用的外键是NameEntry的主键 - 这将是唯一的,我不会看到ContentEntry如何有多个NameEntry。如果不是相反,那么NameEntry可以有多个ContentEntry,而ContentEntry与一个NameEntry有一个ManyToOne关系?如果没有,您可能想要描述您想要的表格或对象图形应该是什么样的,并从那里开始工作。