为什么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 奇怪的是,主键总是正确创建?
答案 0 :(得分:5)
当你在getter上添加注释时,Hibernate会使用属性访问策略,当你将它们放在字段上时,Hibernate会使用字段访问策略。但是,除非使用@Access
对访问策略进行细粒度控制,否则不应将这些策略混合在同一实体中(或者更确切地说,在同一继承层次结构中)。
默认情况下,Hibernate期望注释的放置方式与@Id
相同,因此在您的情况下,它需要在getter上进行注释。
答案 1 :(得分:0)
我不知道为什么hbm2ddl会忽略某个字段上的@Column,但我发现如果你注释getter而不是正确设置表中的列名。