2011-11-24 93 views
0

使用Joda时间与hibernate支持配对。配置如下:在休眠初始化期间Joda类型def加载失败初始化

有类型定义在org.joda.time.package-info.java

@org.hibernate.annotations.TypeDefs({ 
@org.hibernate.annotations.TypeDef(
         name="localDate", 
         typeClass = 
org.joda.time.contrib.hibernate.PersistentLocalDate.class 
     ) 
}) 
package org.joda.time; 

有与会话工厂配置弹簧背景:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
     <property name="packagesToScan"> 
      <list> 
       <value>org.joda.time</value> 
      </list> 
     </property> 
     <property name="annotatedClasses"> 
      <list> 
       <value>...</value> 
... 
      </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> 
       <prop key="hibernate.query.substitutions">true 1, false 0, yes 'Y', no 'N'</prop> 
       <prop key="hibernate.show_sql">false</prop> 
       <prop key="hibernate.format_sql">true</prop> 
      </props> 
     </property> 
     <property name="dataSource" ref="dataSource"/> 
    </bean> 

然后是测试用例:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration({"classpath:spring-test.xml"}) 
@Transactional 
public class OperatorDaoTest extends AbstractTransactionalJUnit4SpringContextTests { 
//autowired dao field defined 
... 
@Test 
public void testMethod(){ 
//calls DAO method 
} 
} 

问题是一个异常:

Caused by: org.hibernate.MappingException: Could not determine type for: localDate, at table: TABLE_NAME, for columns: [org.hibernate.mapping.Column(DATE_COLUMN)] 

回答

1

我使用标准的日期映射到数据库,然后在我的getter/setter我使用乔达时间和执行转换,如您有避免的问题。 This may be of use

+0

Thanx的答案,但遵循你的建议涉及太多的努力,它更容易使用一个不同的解决方法,如添加类型定义属性会话工厂。 –

+0

在我看来,这是一个薄弱的解决方法,并不能真正解决手头的问题。 – rtcarlson

+0

@rtcarlson感谢评论/投票,也许你可以建议一个较弱的答案? – NimChimpsky