Sam*_*ith 4 java sql hibernate
好的,所以在数据库中我们有一个名为distributionCompanies的表,就像这样创建:
CREATE TABLE `distributionCompanies` (
`distributionCompanyID` INT(11) NOT NULL,
`distributionCompanyName` VARCHAR(255) NOT NULL,
PRIMARY KEY (distributionCompanyID)
);
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用Hibernate将此表映射到一个类:
@Entity
@Table(name = "distributionCompanies")
public class DistributionCompany implements DatabaseObject {
@Id
@GeneratedValue
@Column(name = "distributionCompanyID", length = 11, unique = true, nullable = false)
private int distributionCompanyID;
....
Run Code Online (Sandbox Code Playgroud)
但是,在运行时,我遇到了这个问题:
Initial SessionFactory creation failedorg.hibernate.HibernateException: Missing column: distributionCompanyID_distributionCompanyID in database2.distributionCompanies
Run Code Online (Sandbox Code Playgroud)
这不是数据库中唯一的表,我已经设法使用相同的方法成功映射其他类,所以我有点难过为什么这会导致问题.
谢谢你的时间,塞缪尔史密斯
编辑:为了回应Xavi的评论,我暂时删除了该列的另一个映射,错误消失了,所以坏蛋可能在下面的代码中:
@ManyToOne(targetEntity = DistributionCompany.class)
@JoinTable(name = "distributionCompanies", joinColumns = { @JoinColumn(name = "distributionCompanyID", nullable = false) })
private int distributionCompanyID;
Run Code Online (Sandbox Code Playgroud)
Hibernate是寻找一个名为列distributionCompanyID_distributionCompanyID
在distributionCompanies
表中.
这可能是由于没有ToOne
关联映射到此表@JoinColum
.
来自Hibernate文档:
@JoinColumn属性是可选的,默认值类似于一对一,所有者端关系名称的串联,_(下划线)和自有端中主键列的名称.在此示例中为company_id,因为属性名称为company,而Company的列ID为id.
如果你在另一个实体中有一个@ManyToOne
或@OneToOne
关联映射,这可以解释为什么Hibernate正在寻找这样一个列.
编辑看到您发布的关联映射,它看起来应该是:
@ManyToOne(targetEntity = DistributionCompany.class)
@JoinColumn(name = "distributionCompanyID")
private DistributionCompany distributionCompany;
Run Code Online (Sandbox Code Playgroud)
该@JoinTable
注释被用来指定一个连接表(这意味着用于许多-to-many关联模型中的中间表).映射关联的关键是处理映射的对象实例(在本例中为a DistributionCompany
,而不仅仅是a distributionCompanyId
).
归档时间: |
|
查看次数: |
10880 次 |
最近记录: |