AttributeOverride устанавливает нулевое значение в несопоставленное поле - PullRequest
3 голосов
/ 09 марта 2012

У меня есть класс

@Embeddable
public class MyClass implements Serializable
{
   private String field1;
   private String field2;
   private String field3;

// getters, setters
}

и я сопоставил класс

public class MappedClass implements Serializable
{
   @Embedded
   @AttributeOverrides(
      {
        @AttributeOverride(name = "field1", column = @Column(name = "column1")),
        @AttributeOverride(name = "field2", column = @Column(name = "column2")),
        @AttributeOverride(name = "field3", column = @Column(name = "column3"))
      })
   private MyClass myClassField1;

   @Embedded
   @AttributeOverrides(
      {
        @AttributeOverride(name = "field1", column = @Column(name = "column1")),
        @AttributeOverride(name = "field2", column = @Column(name = "column2")),
      })
   private MyClass myClassField2;

// setters, getters

}

Я хочу, чтобы 'filed3' в myClassField2 был 'null', потому что 'field3' не имеет отображения БД. Что я могу сделать? Значение поиска JPA для 'field3' в столбце 'field3'

В Hibernate все прошло нормально!

   <component name="myClassField1" class="MappedClass">
           <property name="field1" type="string" column="column1" />
           <property name="field2" type="string" column="column2" />
           <property name="field3" type="string" column="column3" />
   <component/>  

   <component name="myClassField2" class="MappedClass">
           <property name="field1" type="string" column="column1" />
           <property name="field2" type="string" column="column2" />
   <component/>  

Но мне нужно это в JPA

1 Ответ

4 голосов
/ 09 марта 2012

То, что вы хотите сделать, невозможно. Эфирное поле является постоянным или временным. Это не может быть иногда одно, а иногда и другое.

Рассмотрите возможность определения MyClass1 только с двумя полями и MyClass2, расширяющего MyClass1, и добавлением третьего поля. Используйте первый для myClassField2, а второй для myClassField1.

Обратите внимание, что в вашем примере вы дважды сопоставили column1 и column2, что также неверно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...