#java #hibernate #jpa
#java #переход в спящий режим #jpa
Вопрос:
Из-за некоторого странного поведения генератора метамодели Hibernate JPA 2 мне нужно установить тип доступа для всех моих объектов на AccessType.FIELD
. — Поскольку я не хочу добавлять @Access
аннотации к каждому классу, я прошу указать способ установки типа доступа по умолчанию.
До сих пор я пробовал это с помощью этого orm.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
version="2.0">
<persistence-unit-metadata>
<persistence-unit-defaults>
<access>FIELD</access>
</persistence-unit-defaults>
</persistence-unit-metadata>
Но это, похоже, игнорируется, генератор использует доступ к СВОЙСТВАМ по умолчанию.
Когда я добавляю эти строки в {{orm.xml }}:
<access>FIELD</access>
<entity class="domain.Banner"></entity>
<entity class="domain.Stuff"></entity>
...
Генератор начинает уделять внимание полям (а не свойствам), но это еще хуже, чем способ аннотации.
Итак, мой вопрос: как установить тип доступа по умолчанию?
Комментарии:
1. Я использую Hibernate 3.6 с JPA 2.0 и в основном использую доступ к полю во всех своих объектах. Генератор метамодели не выявил никаких проблем. В чем именно заключается проблема, с которой вы сталкиваетесь с генератором метамодели?
2. @edalorzo: Я делаю то же самое в среде Spring Roo, и даже если у объекта нет аннотаций Roo, в режиме гибернации обращайте внимание только на свойства, но не на поля (за исключением случаев, когда я использую аннотацию @Access)
3. Вы помещаете аннотации JPA в поля или средства получения / установки? Если вы поместите их в getter / setters, JPA будет использовать тип доступа к свойству.
4. @Behrang Saeedzadeh: Аннотации находятся на полях. Но это приложение spring roo, и по какой-то причине поле / свойство автоматического обнаружения работает некорректно.
Ответ №1:
Удалось ли вам найти решение вашей проблемы? Я не уверен, поддерживают ли это hibernate и JPA, но вы можете использовать аннотации на уровне пакета. Вот пример определения типов из http://www.ctrlspace.ca/?p=10
@TypeDefs({ @TypeDef(name = "trim", typeClass = TrimmedString.class) })
@FilterDefs({
@FilterDef(name = "ACTIVE_FILTER", defaultCondition = "((end_date is null) or (end_date >= current_date))"),
@FilterDef(name = "HISTORICAL_FILTER", defaultCondition = "(end_date < current_date)")})
package com.ctrlspace.model;
import org.hibernate.annotations.FilterDef;
import org.hibernate.annotations.FilterDefs;
import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;
import com.ctrlspace.type.TrimmedString;