【发布时间】:2015-10-31 05:36:44
【问题描述】:
我有一张坚固的桌子。
我有一张与强表有一对一关系的弱表。真的是 0 对 1 的关系,因为强表并不总是弱表中的一行。要识别这个弱表,强表的ID就足够了。
最后我有另一个弱表,与第一个弱实体的 ManyToOne 关系。它需要OneToOneWeakEntity的id(也就是强表的id),和自己的id。这就像 OneToOneWeakTable 的历史。
我想在 Hibernate 中映射,但我不知道该怎么做。
现在我有以下代码:
@Entity
@Table(name="table")
public class Table {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id_table")
private Integer idTable;
private String otherAtributes;
....
}
@Entity
@Table(name="oneToOneWeakTable")
public class OneToOneWeakEntity {
@OneToOne(cascade = CascadeType.ALL, optional=false)
@Id
@JoinColumn(name="table_id_table")
private Table table;
private String otherAtributes;
....
}
@Entity
@Table(name="oneToManyWeakTable")
@IdClass(EntityPk.class)
public class OneToManyWeakTable {
@Id
@ManyToOne
@JoinColumn(name="table_id_table")
private OneToOneWeakEntity oneToOneWeakEntity;
@Id
@Column(name="own_id")
private String ownId;
private String otherAtributes;
....
}
class EntityPk {
@Id
@ManyToOne
@JoinColumn(name="table_id_table")
private OneToOneWeakEntity oneToOneWeakEntity;
@Id
@Column(name="own_id")
private String ownId;
private String otherAtributes;
....
}
我的问题是当我尝试运行我的应用程序时,因为我有这个部署错误:
Caused by: org.hibernate.AnnotationException: A Foreign key refering package.OneToOneWeakEntity from package.OneToManyWeakTable has the wrong number of column. should be 0
at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:502)
at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:117)
at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1518)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1422)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1930)
如何映射这种关系??
谢谢!
编辑:我也尝试用它来映射 OneToOneWeakTable:
@OneToOne(cascade = CascadeType.ALL, optional=false)
@PrimaryKeyJoinColumn
@Id
@JoinColumn(name="table_id_table")
private Table table;
在这种情况下,我在尝试部署时也遇到了错误,但出现了不同的异常:
Caused by: java.lang.NullPointerException
at org.hibernate.cfg.Ejb3JoinColumn.checkReferencedColumnsType(Ejb3JoinColumn.java:568)
at org.hibernate.cfg.BinderHelper.createSyntheticPropertyReference(BinderHelper.java:258)
at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:116)
at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1518)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1422)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)
【问题讨论】:
标签: java hibernate orm annotations one-to-one