如何使用 JPA/Hibernate 注释将 MySQL char(n) 列映射到实例变量?

Posted

技术标签:

【中文标题】如何使用 JPA/Hibernate 注释将 MySQL char(n) 列映射到实例变量?【英文标题】:How to map a MySQL char(n) column to an instance variable using a JPA/Hibernate annotation? 【发布时间】:2011-09-06 15:48:47 【问题描述】:

我在类型为 char(7) 的 mysql 表中的“语言”列上遇到 JPA/Hibernate 映射问题。在我的实体中,为该字段生成的代码是:

    private String language;

这会在运行时导致以下异常:

        ... 43 more
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: prosvetaPersistenceUnit] Unable to build EntityManagerFactory
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:911)
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:74)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:225)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:308)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
    ... 58 more
Caused by: org.hibernate.HibernateException: Wrong column type in joo16_dev.jos_categories for column language. Found: char, expected: varchar(255)
    at org.hibernate.mapping.Table.validateColumns(Table.java:283)
    at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1313)
    at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:139)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:378)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1842)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:902)
    ... 63 more

提前致谢!

日本

【问题讨论】:

【参考方案1】:

试试这个:

@Column(name="language",columnDefinition="char(7)")

看看有没有用。

【讨论】:

谢谢,是的,这行得通:@Column(name="language",columnDefinition="char") 类似地,@Column(name="params",columnDefinition="text") 用于文本类型的 db 列 "params" 和 @Column(name = "published", columnDefinition = "tinyint")对于 tinyint Joomla 类型的 db 列“已发布”!开发人员熟悉。【参考方案2】:

对我来说*Grails 是有效的:sqlType: "char" 在映射上

【讨论】:

以上是关于如何使用 JPA/Hibernate 注释将 MySQL char(n) 列映射到实例变量?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot:如何从 JPA/Hibernate 注释中保持 DDD 实体的清洁?

如何使用 JPA/Hibernate 在孩子的 id 中引用父母的 id?

如何使用 JPA/hibernate EntityManager 和 EJB3.0 实现泛型?

Hibernate/JPA 是不是考虑了瞬态修饰符(而不是注释)

JPA Hibernate - 数据库和注释中的级联删除

外键 jpa/hibernate 注释不能按预期工作