2012-07-17 94 views
4

爲什麼hbm2ddl會忽略@Column註解?hbm2ddl忽略@Column註釋?

這是我的課: -

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name = "BASETEMPLATE") 
public class BaseTemplate implements IBaseTemplate 
{ 
    private Integer id; 

    @Column(name="TEMPLATENAME")  
    private String templateName; 

    @Column(name="BASETEMPLATEID") 
    private Integer baseTemplateId; 

    @Id 
    @GeneratedValue 
    @Column(name = "TEMPLATEID") 
    @Override 
    /** {@inheritDoc} */ 
    public Integer getId() { return id; }  
... 
} 

和hbm2dll產生這種(SQLSERVER)表

dbo.BASETEMPLATE 
(
TEMPLATEID  int 
templateName varchar(255) 
baseTemplateId int 
) 

方言org.hibernate.dialect.SQLServerDialect並 奇怪的主鍵總是正確創建?

+0

您期望生成哪種表結構?我看到3個「@ Column」註釋(帶名稱)和3個DB表列,名稱相同。它看起來對我很有用。 – 2012-07-17 14:40:56

+0

我希望案例匹配(即時移植到區分大小寫的數據庫),但即使列名完全不同,這dosnt工作。 – 2012-07-18 07:54:23

+0

對不起,我甚至沒有注意到案件的差異,哎呀我的壞。 – 2012-07-18 13:48:34

回答

5

當您將註釋放在getter上時,Hibernate使用屬性訪問策略,當您將它們放在字段上時,Hibernate使用字段訪問策略。但是,除非您使用@Access對訪問策略進行細粒度控制,否則不應將這些策略混合在同一實體中(或者更確切地說,在相同的繼承層次結構中)。

默認情況下,Hibernate期望註釋的放置方式與@Id相同,因此在您的情況下,它需要在getter上註釋。

0

我不知道爲什麼字段上的@Column被hbm2ddl忽略,但是我發現如果你註釋了getter,而是正確設置了表中的列名。