2012-07-17 91 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,而是正确设置了表中的列名。