4

为什么 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 奇怪的是,主键总是正确创建的?

4

2 回答 2

5

当你在 getter 上放置注解时,Hibernate 使用属性访问策略,当你将它们放置在字段上时,Hibernate 使用字段访问策略。但是,您不应该在同一个实体中(或者更准确地说,在同一个继承层次结构中)混合这些策略,除非您使用@Access对访问策略的细粒度控制。

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

于 2012-07-17T14:22:53.537 回答
0

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

于 2012-07-18T07:52:35.707 回答