无法找到具有逻辑名称的列:变得疯狂:)

时间:2018-02-26 15:32:40

标签: java hibernate jpa

也许我在代码中过于深入,我无法再以透明的眼光看待它。你能帮我吗? :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

1 个答案:

答案 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。您希望它使用哪一列?