2014-10-29 2 views
3

Я работаю с jpa 2.0, и у меня есть поле в таблице базы данных, которая имеет значение по умолчанию, я помещаю это поле в мое определение объектов как insertable = false, чтобы при вставке сохранить значение по умолчанию, вставка выполнена правильно, но когда запрашивается объект, это поле является нулевым в сущности, однако, что оно было вставлено правильно.jpa2 заставить em обновить поле, установленное как insertable = false

Это мой код:

@Entity 
@Table(name="SOME_TABLE") 
public class SomeTable implements Serializable { 
private static final long serialVersionUID = 1L; 

@EmbeddedId 
private SomeTablePK id; 

@Column(name="X1") 
private String x1; 

**@Column(name="X2", insertable=false)** 
private Date x2; 

... more fields.... 

... setters and getters... 
} 

Есть ли способ заставить диспетчер сущностея обновить значение поля, которое я использовал в качестве Вставляемого = лжи? или что я могу сделать, чтобы исправить это?

спасибо.

PS. Важно отметить, что в моем persistence.xml и поместите следующую строку, чтобы отключить кеш.

<properties> 
<property name="javax.persistence.sharedCache.mode" value="NONE"/> 
</properties> 

ответ

3

Вам необходимо будет вручную активировать обновление после операции промывки.

спецификации (3.2.4 Синхронизация с базой данных) говорит, что:

состояние постоянных сущностей синхронизируется с базой данных в транзакции. Эта синхронизация включает в себя запись в базу данных любых обновлений для постоянных объектов и их отношений, как указано выше.

Обновление состояния объекта включает в себя как присвоение нового значения постоянному свойству, так и поле объекта, а также модификацию изменяемого значения постоянного свойства или поля [28].

Обратите внимание ниже:

Синхронизация с базой данных не влечет за собой обновление любых управляемых объектов, если операция обновления не будет явно ссылаться на тех лицах или каскад к ним в результате спецификации значения каскада = REFRESH или cascade = ALL.

+0

Спасибо за объяснение, поле, которое имеет значение по умолчанию, - это поле, которое не имеет ограничений, где и как я размещаю каскад аннотации = REFRESH ??? Thnx снова! – Mariah

+0

Аннотации не будут работать, но само по себе, вам нужно будет вызвать 'entityManager.refresh (YOU_ENTITY)'. Каскадная аннотация будет работать только для кораблей отношения сущности. – uaiHebert

+0

привет, спасибо за ответ, когда я пытаюсь сделать обновление после того, как сущность говорит: «EntityNotFoundException: Entity больше не существует», я использую jpa в EJB, как я могу это исправить? – Mariah

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

  • Нет связанных вопросов^_^