2016-06-20 7 views
0

У меня есть объект, который должен присоединиться к другому объекту. Это отношение является необязательным и использует EmbeddedId.Как пометить какое-либо отношение, используя EmbeddedId?

@ManyToOne 
@JoinColumns({ 
    @JoinColumn(name = "CUST_NR", referencedColumnName = "CUST_NR", insertable = false, updatable = false), 
    @JoinColumn(name = "BILL_NR", referencedColumnName = "BILL_NR", insertable = false, updatable = false)}) 
@ForeignKey(name = "none") 
// Field is optional, so no need for a constraint 
// Need to use deprecated annotation https://hibernate.atlassian.net/browse/HHH-8805 
private Report report; 

Если я запрашиваю объект, который не имеет соответствующего доклада он терпит неудачу с

javax.persistence.EntityNotFoundException: Не удается найти отчет с ID ReportPk @ 62675cdb

Это работающих для простых идентификаторов. Что я упустил?

Рабочее обходное использование будет использовать FetchType.LAZY. Но я хочу попытаться избежать этого.

ответ

1

В JPA нет возможности. Если вы хотите использовать аннотации спящего режима, вы можете использовать аннотацию NotFound.

@ManyToOne 
@JoinColumns({ 
    @JoinColumn(name = "CUST_NR", referencedColumnName = "CUST_NR", 
       insertable = false, updatable = false), 
    @JoinColumn(name = "BILL_NR", referencedColumnName = "BILL_NR", 
       insertable = false, updatable = false)}) 
@ForeignKey(name = "none") 
// Field is optional, so no need for a constraint 
// Need to use deprecated annotation https://hibernate.atlassian.net/browse/HHH-8805 
@NotFound(NotFoundAction.IGNORE) 
private Report report; 

Посмотрите на @NotFound(NotFoundAction.IGNORE).