我将spring jpa与hibernate和ms Sqlserver结合使用。我有一个实体,它有一个带有@Enumerated(EnumType.STRING)注释的枚举属性。生成数据库架构时,用枚举值填充的列具有int类型而不是char类型。
设置数据库属性的Bean方法:
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;
}枚举和实体:
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生成的表:
CREATE TABLE [dbo].[elenco](
[id] [bigint] IDENTITY(1,1) NOT NULL,
[ele] [int] NULL,
[nome] [varchar](255) NULL,发布于 2020-11-28 20:56:34
如果您可以在getter方法上编写@Enumerated(EnumType.STRING),那么它将会工作。
发布于 2021-02-23 10:31:56
你试过这个吗?您仍然需要在get方法中使用@Column注释来指定列名,而不是列定义。
@Enumerated(EnumType.STRING)
@Column(name="ele")
public Elenco getEle() {...}https://stackoverflow.com/questions/50352974
复制相似问题