hbm2ddl忽略@Column注释?

时间:2012-07-17 14:07:25

标签: hibernate hbm2ddl

为什么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
)

dialect是org.hibernate.dialect.SQLServerDialect 奇怪的是,主键总是正确创建?

2 个答案:

答案 0 :(得分:5)

当你在getter上添加注释时,Hibernate会使用属性访问策略,当你将它们放在字段上时,Hibernate会使用字段访问策略。但是,除非使用@Access对访问策略进行细粒度控制,否则不应将这些策略混合在同一实体中(或者更确切地说,在同一继承层次结构中)。

默认情况下,Hibernate期望注释的放置方式与@Id相同,因此在您的情况下,它需要在getter上进行注释。

答案 1 :(得分:0)

我不知道为什么hbm2ddl会忽略某个字段上的@Column,但我发现如果你注释getter而不是正确设置表中的列名。