2016-08-04 4 views
0

У меня есть объект, который выглядит примерно так:поле помечается @Transient обновляется в базе данных

@Entity 
public class Candidate { 

... 
    @Transient 
    private JobApplication mostRecentApplication 
... 
} 

@Entity 
public class JobApplication{ 
... 
    @ManyToOne 
    private Candidate candidate; 
... 
} 

Для того, чтобы устранить циклическую ссылку, при возврате Candidate как объект JSON, я поставил Candidate в null на JobApplication, содержащемся в пределах Candidate. Однако, когда я сохраняю Candidate, который был обновлен следующим образом, он обновляет JobApplicationnullCandidate, убивая ассоциацию. Это ошибка, или я делаю что-то неправильно? У меня создалось впечатление, что провайдеры JPA должны игнорировать поля, аннотированные @Transient.. Я использую Hibernate с данными Spring.

+1

Если вы установите кандидата как null в контексте транзакции, изменения будут внесены в базу данных –

ответ

0

Я поставил Candidate в null на JobApplication содержащейся в Candidate.

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

// change value to null 
candidate.setMostRecentApplication(null); 
// change value to a detached instance 
candidate.setMostRecentApplication(new JobApplication(...)); 

Но если вы сделаете следующее, вы можете наблюдать, что вы видите

candidate.getMostRecentApplication().setSomeProperty(null); 

В этом случае, вы не меняете mostRecentApplication, но вместо того, чтобы вы изменения состояния someProperty в mostRecentApplication , Если mostRecentApplication не является отдельным и неуправляемым экземпляром, тогда значение будет изменено, если внутри транзакционного контекста.

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