1

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

我的复合主键类如下:

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

    @EmbeddedId
    private NameEntryPK id;

    //getters, setters
}

Composite 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我试图用给定的重音包围列名称。但它不起作用。

4

1 回答 1

2

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

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

于 2012-11-30T16:50:14.323 回答