How to map a MySQL char(n) column to an instance variable using a JPA/Hibernate annotation?

20,241

Solution 1

Try this:

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

see if that works.

Solution 2

For me*Grails it's works: sqlType: "char" on mapping

Share:
20,241
Jean-Pierre Schnyder
Author by

Jean-Pierre Schnyder

I love sharing !

Updated on December 28, 2020

Comments

  • Jean-Pierre Schnyder
    Jean-Pierre Schnyder over 3 years

    I encounter a JPA/Hibernate mapping problem on a column "language" in a MySQL table whose type is char(7). In my entity, the code generated for the field is:

        private String language;
    

    this causes the following exception at runtime:

            ... 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
    

    Thanks in advance !

    JP

  • Jean-Pierre Schnyder
    Jean-Pierre Schnyder almost 13 years
    Thanks, yes, this works: @Column(name="language",columnDefinition="char")
  • Jean-Pierre Schnyder
    Jean-Pierre Schnyder almost 13 years
    Similarly, @Column(name="params",columnDefinition="text") for db column "params" of type text and @Column(name = "published", columnDefinition = "tinyint") for db column "published" of type tinyint Joomla! developers are familiar with.