2013-12-12 137 views
0

當我在生成「create table」sql時遇到了hibernate映射的問題。 屬性sid是字符串類型,但是在數據庫中生成表acl_entry後它變爲整數類型。我不知道爲什麼。這導致了這樣的錯誤:hibernate postgres多對一映射問題

org.postgresql.util.PSQLException: ERROR: insert or update on table "acl_entry" 
violates foreign key constraint "id" 
    Detail: Key (sid)=(0) is not present in table "acl_sid". 
     at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryEx 
ecutorImpl.java:2157). 

任何幫助表示讚賞。

這裏是我的代碼:

AclEntry.java:

@Id 
@SequenceGenerator(name="aclentry_identifier_seq", sequenceName="aclentry_identifier_seq", allocationSize=1) 
@GeneratedValue(strategy = GenerationType.AUTO, generator="aclentry_identifier_seq") 
@Column(name = "id", insertable=false, updatable=false) 
private Integer id; 



@ManyToOne(fetch=FetchType.LAZY, cascade = CascadeType.ALL) 
@JoinColumn(name = "sid", nullable = false) 
@ForeignKey(name = "id") 
private AclSid aclSid; 


public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

AclSid.java:

@Id 
    @SequenceGenerator(name="aclsid_identifier_seq", sequenceName="aclsid_identifier_seq", allocationSize=1) 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="aclsid_identifier_seq") 
    @Column(name = "id", insertable=false, updatable=false) 
    private Integer id; 



    @Column(name = "sid") 
    private String sid; 


    public Integer getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

我的問題是:產生的ACL_ENTRY後,其場 「SID」 是如預期的那樣,整數類型不是字符串。這導致生成後的密鑰(sid)=(0)。

mask integer, 
    acl_object_identity integer, 
    sid integer NOT NULL 

感謝閱讀:

表ACL_ENTRY作爲生成。

+0

你的'@ ForeignKey'表明你引用'id'列,而不是' sid',這是一個整數。 –

回答

1

而不必

@ManyToOne(fetch=FetchType.LAZY, cascade = CascadeType.ALL) 
@JoinColumn(name = "sid", nullable = false) 
@ForeignKey(name = "id") 
private AclSid aclSid; 

嘗試設置

​​

ManyToOneJoinColumn是JPA的註解。 ForeignKey是Hibernate特有的註解,我個人從未使用它,所以你可能不需要:)

+0

謝謝Zoltán。但我的問題是:在生成acl_entry之後,其字段「sid」是整數類型,而不是預期的字符串。這導致生成後的密鑰(sid)=(0)。 – user3051291