如何在Spring的applicationContext.xml中配置Hibernate映射属性?

时间:2014-09-18 11:26:07

标签: java xml spring hibernate

我需要为我的应用程序启用Joda-Time-Hibernate支持。我使用applicatoinContext.xml和Annotations来配置Hibernate。

applicatoinContext.xml

...
<context:annotation-config/>
    <tx:annotation-driven/>
...
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/default" />
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="packagesToScan" value="ee.test.mysql"></property>


        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"
          p:sessionFactory-ref="sessionFactory">

          </bean>
</beans>

在哪里添加<property type="org.joda.time.contrib.hibernate.PersistentDateTime" name="dateTime"/>?有没有办法从applicatioContext.xml使用database.properties,注释和获取数据库属性?

更新

我正在使用hibernate v4.2.2。使用Joda DateTime到datetime类型的mysql映射实体的最佳方法是什么?

UPDATE2

运行当前配置导致错误:

ERROR - Data truncation: Incorrect datetime value: '\xAC\xED\x00\x05sr\x00\x16org.joda.time.DateTime\xB8<xdj[\xDD\xF9\x02\x00\x00xr\x00\x1Forg.joda.time.base.BaseDateTime\xFF\xFF\x' for column 'date_time' at row 1
Exception in thread "main" org.hibernate.exception.DataException: could not execute statement

如果我的jodatime配置对于Hibernate 4是正确的那么问题出在哪里?为什么会出现Incorrect datetime value错误?

UPDATE3:

我找到了各种各样的人。

主要方法

product.setDate_time(new Timestamp((new DateTime(2014,11,11,15,0,0,0)).getMillis()));

并将我的实体更改为:

private Timestamp dateTimeStart;

没有额外的类型注释。我很好奇,为什么joda-hibernate和带有@Type注释的jadira在这个例子中没有用。

0 个答案:

没有答案