Я генерирую классы из xsd-схем.Укажите поле идентификатора UUID с Hyperjaxb3
Я не могу понять, как сказать, что идентификатор объекта должен быть UUID, сгенерированным в программе. Моя ошибка:
Hibernate: выберите NEXTVAL ('hibernate_sequence') org.hibernate.id.IdentifierGenerationException: Идентификаторы для этого класса должны быть назначены вручную перед вызовом сохранения(): com.vsetec.collect.app.generated. Баланс
Мой код:
<xsd:complexType name="balance">
<xsd:annotation>
<xsd:documentation>Balance Amounts</xsd:documentation>
</xsd:annotation>
<xsd:all>
<xsd:element name="comment" type="longNameString"/>
</xsd:all>
<xsd:attribute name="typeCd" type="referenceCode"/>
<xsd:attribute name="amount" type="xsd:decimal"/>
<xsd:attribute name="currencyCd" type="referenceCode"/>
<xsd:attribute name="dateLoad" type="xsd:date"/>
<xsd:attribute name="historizedOn" type="historizedDate"/>
<xsd:attribute name="id" type="uuidString" minOccurs="0">
<xsd:annotation>
<xsd:appinfo>
<jaxb:property>
<jaxb:javadoc>@hyperjaxb.hibernate.id unsaved-value="null" generator-class="uuid.hex"</jaxb:javadoc>
</jaxb:property>
<hj:id>
<!--<hj:generator generatorClass="uuid"/>-->
<orm:column name="id"/>
<!--<orm:generated-value generator="uuid"/>-->
</hj:id>
</xsd:appinfo>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
обн начать Это порождает следующий в моем Java:
/**
* @hyperjaxb.hibernate.id unsaved-value="null" generator-class="uuid.hex"
*
* @return
* possible object is
* {@link String }
*
*/
@Id
@Column(name = "id", length = 32)
public String getId() {
return id;
}
Если добавить
<orm:generated-value generator="uuid"/>
, он говорит что-то вроде «нет генератора по имени UUID»
Если я добавить
<hj:generator generatorClass="uuid"/>
, ничего не действительно добавил, не аннотацию добавить генератор UUID или что-нибудь еще. Я выполнил поиск подстроки «uuid», поэтому я знаю. Вышеупомянутая ошибка остается.
Я хочу сделать Hibernate для генерации идентификатора как UUID. Док говорит, что достигается с помощью аннотаций, как следующее:
@Id
@GeneratedValue
public UUID id;
документация здесь:
Он описывает, как должно быть аннотированный поле типа UUID. Я предполагаю, что это еще один вопрос о том, как отображать поля UUID в Jaxb, поэтому я бы сначала попытался отобразить его как шестнадцатеричную строку. Но если у вас есть рабочее решение для этой проблемы, которое далеко не редко, это было бы полезно для всех.
конца обн
Ранее с HBM я сделал это, как в следующем:
<class entity-name="Balance">
<cache usage="read-write"/>
<comment>
Balance Amounts
</comment>
<id name="id" type="string" length="32">
<generator class="uuid"/>
</id>
<property name="currencyCd" type="string" length="32"/>
<property name="amount" type="big_decimal"/>
<property name="comment" type="string" length="255"/>
<property name="historizedOn" type="date"/>
</class>
UPD
Я понятия не имею, что аннотации это XML отображение соответствует, но работал. Кажется, что он прикрепляет генератор UUID к полю String. Я не могу сказать, что такое определение класса, потому что я использовал «динамические карты». Моя задача - просто переключиться с HBM и динамических карт на Hyperjaxb и сгенерированные классы.
ОТВЕТ (в форме ответа, а что смутный RTFM стиле намеке)
<xsd:attribute name="id" type="uuidString" minOccurs="0">
<xsd:annotation>
<xsd:appinfo>
<hj:id>
<orm:column name="id"/>
<orm:generated-value generator="uuid"/>
</hj:id>
<annox:annotate>
<ha:GenericGenerator name="uuid" strategy="uuid2"/>
</annox:annotate>
</xsd:appinfo>
</xsd:annotation>
</xsd:attribute>
uuidString должен быть 36 символов длиной
пса. есть еще проблема с массовыми вставками (подозреваемый UUID обманутых, но не уверена, что
Этот вопрос сводится к следующему: какие аннотации генерирует HJ3 и что вы хотели бы сгенерировать? – lexicore
@lexicore спасибо, я обновил вопрос. В принципе, я не знаю, какие аннотации Hibernate/Persistence должны быть сгенерированы ... Моя единственная надежда заключалась в том, что проблема довольно распространена, и у нее должно быть простое решение. – fedd