首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Enumerated(EnumType.STRING)生成int列而不是varchar

@Enumerated(EnumType.STRING)生成int列而不是varchar
EN

Stack Overflow用户
提问于 2018-05-15 22:36:41
回答 2查看 425关注 0票数 1

我将spring jpa与hibernate和ms Sqlserver结合使用。我有一个实体,它有一个带有@Enumerated(EnumType.STRING)注释的枚举属性。生成数据库架构时,用枚举值填充的列具有int类型而不是char类型。

设置数据库属性的Bean方法:

代码语言:javascript
复制
private Properties getHibernateProperties() {
    Properties properties = new Properties();
    properties.setProperty("hibernate.dialect","org.hibernate.dialect.SQLServer2012Dialect");

    properties.setProperty("hibernate.hbm2ddl.auto","create-drop");       
    properties.setProperty("ejb.naming_strategy","layer.controller.configuration.PhysicalNamingStrategyImpl");
    properties.setProperty("hibernate.search.default.directory_provider","filesystem");


    return properties;
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {

    HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    vendorAdapter.setShowSql(Boolean.TRUE);        
    LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
    factory.setJpaVendorAdapter(vendorAdapter);
    factory.setDataSource(dataSource());
    factory.setPackagesToScan("layer.domain","layer.application.security.authentication.entities");
    factory.setJpaProperties(getHibernateProperties());
    factory.afterPropertiesSet();

    return factory;
}

枚举和实体:

代码语言:javascript
复制
public enum Elenco {
    A,
    B,
    C,
    D;
}

@Entity
@Table(name="elenco")
public class ElencoClass extends BaseEntity<Long> {

    @Column(name="nomeECognome")
    private String nome;


    @Enumerated(EnumType.STRING)
    @Column(columnDefinition = "varchar")
    private Elenco ele;


    @Id
    @Column(name="id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Override
    protected Long getId() {
        return id;
    }

    @Override
    protected void setId(Long id) {

        super.id=id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Elenco getEle() {
        return ele;
    }

    public void setEle(Elenco ele) {
        this.ele = ele;
    }
}

这是spring生成的表:

代码语言:javascript
复制
 CREATE TABLE [dbo].[elenco](
    [id] [bigint] IDENTITY(1,1) NOT NULL,
    [ele] [int] NULL,
    [nome] [varchar](255) NULL,
EN

回答 2

Stack Overflow用户

发布于 2020-11-28 20:56:34

如果您可以在getter方法上编写@Enumerated(EnumType.STRING),那么它将会工作。

票数 0
EN

Stack Overflow用户

发布于 2021-02-23 10:31:56

你试过这个吗?您仍然需要在get方法中使用@Column注释来指定列名,而不是列定义。

代码语言:javascript
复制
@Enumerated(EnumType.STRING)
@Column(name="ele")
public Elenco getEle() {...}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50352974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档