Ошибка UserType/Hibernate/JodaMoney: PersistentMoneyAmount требует, чтобы currencyCode был определен как параметр

Я использую UserType 3.0.0.RC1 для сопоставления JodaMoney с Hibernate.

Я застрял с ошибкой при инициализации SessionFactory:

PersistentMoneyAmount требует, чтобы currencyCode был определен в качестве параметра или чтобы было определено свойство defaultCurrencyCode Hibernate.

Я уверен, что у меня должны быть какие-то проблемы с конфигурацией — вот соответствующие фрагменты.

Постоянство.xml:

<persistence-unit name="spring-jpa">
    <properties>
        <property name="hibernate.format_sql" value="true"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
        <property name="jadira.usertype.autoRegisterUserTypes" value="true"/>
    </properties>
</persistence-unit>

Соответствующая конфигурация весны:

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan">
        <list>
            <value>com.mangofactory.concorde</value>
            <value>com.mangofactory.moolah</value>
        </list>
    </property>
    <property name="persistenceUnitName" value="spring-jpa" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="true" />
            <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect" />
        </bean>
    </property>
</bean>

Любые советы о том, что мне не хватает?


person Marty Pitt    schedule 19.04.2012    source источник


Ответы (3)


В итоге я решил это, используя следующую конфигурацию в моем persistence.xml:

<persistence-unit name="spring-jpa">
    <properties>
        <property name="hibernate.format_sql" value="true"/>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
        <property name="jadira.usertype.autoRegisterUserTypes" value="true"/>
        <property name="jadira.usertype.currencyCode" value="AUD"/>
        <property name="jadira.usertype.seed" value="org.jadira.usertype.spi.shared.JvmTimestampSeed"/>
    </properties>
</persistence-unit>

Сложность в том, что мне нужно было указать jadira.usertype.seed, чтобы jadira.usertype.currencyCode можно было обнаружить.

person Marty Pitt    schedule 20.04.2012

если вы ищете решение на основе аннотаций, вы можете попробовать это

@Type(type = "org.jadira.usertype.moneyandcurrency.joda.PersistentMoneyAmount", parameters = { @Parameter(name="currencyCode", value="USD") })
private Money price;

нашел здесь

Архив электронной почты: usertype-discuss (только для чтения)

person simou    schedule 12.06.2012

Что касается необходимости настройки начального числа — это связано с ошибкой в ​​3.0.0-RC1 и будет исправлено в будущем.

person Chris Pheby    schedule 01.05.2012