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

ゲッターに注釈を配置すると、Hibernate はプロパティ アクセス戦略を使用し、フィールドに注釈を配置すると、Hibernate はフィールド アクセス戦略を使用します。@Accessただし、アクセス戦略をきめ細かく制御する場合を除き、これらの戦略を同じエンティティ (より正確には、同じ継承階層) に混在させないでください。

デフォルトでは、Hibernate はアノテーションが と同じ方法で配置されることを@Id期待しているため、この場合、ゲッターにアノテーションが期待されます。

于 2012-07-17T14:22:53.537 に答える
0

フィールドの@Columnがhbm2ddlによって無視される理由はわかりませんが、代わりにゲッターに注釈を付けると、テーブルの列名が正しく設定されることがわかりました。

于 2012-07-18T07:52:35.707 に答える