2014-10-29 2 views
0

Я хочу, если это возможно изменить поведение JPA по умолчанию, я хочу, чтобы значение по умолчанию для всех полей, как «переходных»Переходные поля по умолчанию

У меня есть Embedable

<embeddable class="beans.Address" metadata-complete="false" > 

    <attributes > 

     <basic name="id"> 
      <column name="address_id"></column> 
     </basic> 
     <basic name="description"> 
      <column name="address_description"></column> 
     </basic> 
     <transient name="city"></transient> 
    </attributes> 
</embeddable> 


<entity class="beans.Membership" > 
    <table name="cc_membership"> 
    </table> 
    <!-- --> 
    <attributes> 
     <id name="id"> 
      <column name="id"/> 
      <generated-value generator="sq_cc_membership" strategy="SEQUENCE"/> 
     </id> 

     <!--more properties--> 

     <basic name="shortName"> 
      <column name="shortName"/> 
     </basic> 

     <version name="version"></version> 

     <many-to-one name="physicalPerson"> 
      <join-column name="physical_person_id"></join-column> 
     </many-to-one> 

     <embedded name="address"> 
     </embedded> 
    </attributes> 
</entity> 

The «бобы класс .Address»имеют больше свойств, но когда я буду добавлять дополнительные свойства, я не хочу видеть больше полей в моей cc_membership таблице,

что такое лучший способ сделать это

спасибо,

+0

Занятия находятся в другом пакете Osgi – jrey

ответ

1

Это не может быть сделано в стандартном JPA и поэтому вы будете использовать специфические для провайдера функции.

EclipseLink-Orm.xml имеет исключение, по умолчанию переопределения тега, который вы можете использовать с XML-отображение-метаданными полных orm.xml тегом, как описано здесь: https://wiki.eclipse.org/EclipseLink/Examples/JPA/EclipseLink-ORM.XML#.3Cexclude-default-mappings.2F.3E

Я не знаю, если Hibernate имеет нечто подобное.

+0

спасибо, работает ОК! – jrey

+0

Я использую Eclipselink – jrey

0

Я не уверен, что вы можете (или даже если хотите) изменить поведение JPA по умолчанию, но для этого вы можете создать объект, который будет содержать все новые поля, ant отметить весь объект как переходный. Что-то вроде этого

public class TransientFields { 
    private String field1; 
    private String field2; 
    ... 
    // getters and setters 
} 

И Address будет выглядеть следующим образом

@Embeddable 
public class Address { 
    // persistent fields 
    ... 
    @Transient 
    private TransientFields transientFields; 
    // getters and setters 
} 

Затем, вы можете изменить TransientFields, не затрагивая базу данных.

+0

Привет, Predrag, у меня есть проект OSGI, адрес находится в одном пакете Osgi, а членство находится в другом пакете Osgi. Если один Osgi Bundle можно изменить. не влияет на другое. – jrey

+0

@ jrey.py К сожалению, я не обращал на это особого внимания, так как предполагал, что такое же изменение может быть сделано аналогичным образом. –

Смежные вопросы