也许我在代码中过于深入,我无法再以透明的眼光看待它。你能帮我吗? :d
我知道已经有一些帖子出现了同样的错误,但我尝试了几个提案,但这并没有解决我的问题。
情况如下:
我必须管理历史记录。
我有以下3个表格:
|-------------------|
| HIST_CUSTOMERS |
|-------------------|
| cust_id PK |
| cust_version PK |
| ... |
|-------------------|
Possible values:
100 | 1
100 | 2
101 | 1
100 | 3
...
|---------------------|
| HIST_COLLABORATORS |
|---------------------|
| id PK | <- Sequence
| cust_id FK |
| cust_version FK |
| contact_id FK | <- FK to the Contact History table (HIS_CONTACTS)
| ... |
|---------------------|
Possible values:
200 | 100 | 1 | 400
201 | 100 | 1 | 401
202 | 100 | 1 | 402
203 | 100 | 2 | 400
203 | 100 | 2 | 401
204 | 100 | 2 | 402
205 | 100 | 2 | 403
206 | 101 | 1 | 402
...
|---------------------|
| HIST_CONTACTS |
|---------------------|
| id PK | <- Sequence
| contact_id FK | <- FK to the real Contact table
| contact_version |
| lastname |
| firstname |
| ... |
|---------------------|
Possible values:
300 | 400 | 1 | Dooe | John
301 | 400 | 2 | Doe | John
302 | 400 | 3 | Doe | Bill
303 | 401 | 1 | McFly | Marthy
304 | 401 | 2 | McFly | Marty
305 | 402 | 1 | Nanny | Super
306 | 403 | 1 | Klaus | Santa
307 | 403 | 2 | Claus | Santa
...
以下是我的实体:
HisCustomer:
/**
* List of contacts
*/
// 1 <-> *
@OneToMany(mappedBy="customer", cascade={CascadeType.PERSIST,CascadeType.REMOVE}, fetch=FetchType.LAZY)
private List<HisCollaborator> collaboratorList;
HisCollaborator:
/**
* id
*/
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="HIS_COLLAB_SEQ")
@Column(name="ID")
private Integer id;
/**
* Customer
*/
// * <-> 1
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumns({
@JoinColumn(name="CUST_ID", referencedColumnName="CUST_ID",nullable=false),
@JoinColumn(name="CUST_VERSION", referencedColumnName="CUST_VERSION",nullable=false)
})
private HisCustomer customer;
/**
* contact
*/
// * <-> *
@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REMOVE}, fetch=FetchType.EAGER)
@JoinTable(
name="HIS_COLLABORATORS",
joinColumns={ @JoinColumn(name="CONTACT_ID", referencedColumnName = "CONTACT_ID", nullable=true) },
inverseJoinColumns={ @JoinColumn(name="CONTACT_ID", referencedColumnName = "CONTACT_ID", nullable=true) }
)
private List<HisContact> contact;
HisContact:
/**
* id
*/
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="HIS_CONTACT_SEQ")
@Column(name="ID")
private Integer id;
/**
* collaborators
*/
// * <-> *
@ManyToMany(mappedBy="contact", fetch=FetchType.LAZY)
private Set<HisCollaborator> collaborators;
我收到以下Hibernate错误:
引起:org.hibernate.MappingException:无法找到列 逻辑名称:CONTACT_ID in org.hibernate.mapping.Table(HIS_COLLABORATORS)及其 相关的超级表和次要表 org.hibernate.cfg.Ejb3JoinColumn.checkReferencedColumnsType(Ejb3JoinColumn.java:551)
如果将HIS_COLLABORATORS和HIS_CONTACTS之间的关系设置为一对一,我没有错误,但它不符合我的需要。 顺便说一句,我需要的是将实体HisCollaborator链接到最后一个版本的HIST_CONTACTS(对于给定的CONTACT_ID);如果你有更好的解决方案,我就是开放的)
有什么想法吗? 我真的疯了!
谢谢, Termos
答案 0 :(得分:0)
|---------------------|
| HIST_COLLABORATORS |
|---------------------|
| id PK | <- Sequence
| cust_id FK |
| cust_version FK |
| id_contact FK | <- FK to the Contact History table (HIS_CONTACTS)
我在id_contact
搜索的错误中读到了CONTACT_ID
。您希望它使用哪一列?