如何在Hibernate中正确映射DTO,以便SessionFactory正确初始化?

时间:2014-09-11 07:24:05

标签: java hibernate

这可能是一个非常基本的问题,但我尝试了很多东西,但却遇到了所有问题。爸爸请忽略。

案例1:

当我在hibernate.cfg.xml中提到我的映射时如下:

<mapping class="com.tm.midservice.db.dto.User"/>
<mapping class="com.tm.midservice.db.dto.Company"/>

我收到以下错误。

INFO  - org.hibernate.tool.hbm2ddl.TableMetadata - table found: demodb.company
INFO  - org.hibernate.tool.hbm2ddl.TableMetadata - columns: [analytics_feature_enabled,     source_domain, currency, id, updated_at, source, token, name, domain, created_at, active, mid]
SessionFactory initial creation error.org.hibernate.HibernateException: Wrong column type: active, expected: bit`

我在DTO中描述的专栏如下:

@Column(name = "active")
private boolean active;

(编辑1)

尝试了下面的事情,但没有奏效:

@Type(type="true_false")
@Column(name="active", columnDefinition = "TINYINT(1) DEFAULT 0")
private boolean active;

将异常视为:

SessionFactory initial creation error.org.hibernate.HibernateException: Wrong column type: active, expected: TINYINT(1) DEFAULT 0

(编辑2)

"Found: bit, expected: boolean" after Hibernate 4 upgrade

找到了一些东西
@Column(name="active", columnDefinition = "BIT", length = 1)
private boolean active;

将异常视为:

SessionFactory initial creation error.org.hibernate.HibernateException: Wrong column type: active, expected: BIT

(编辑3)

尝试过:

public class Mysql5BitBooleanDialect extends MySQL5Dialect {
  public Mysql5BitBooleanDialect() {
    super();
    registerColumnType( Types.BOOLEAN, "bit" );
  }
}

这个类确实被调用了,但是异常没有被调用。

案例2

当我不在cfg文件中给出映射并尝试运行我的应用程序时,sessionFactory初始化并且所有但是当我尝试执行任何数据库操作时,我得到错误:

hibernate mapping exception unknown entity

理想情况下,我不应该提供任何映射定义,因为DTO已经获得了[@Entity & @Table (name = "User")]的注释。

如何正确配置?我在这里遗失的任何东西?我很困惑。

1 个答案:

答案 0 :(得分:0)

问题在于数据库表,我完全忽略了它。 TinyInt字段大小为11,更改为1解决了问题。