Чтение значения из сущности B при чтении сущности A (левое соединение в столбце без PK) - JPA 2.0 - PullRequest
3 голосов
/ 27 января 2012

поэтому у меня есть:

@Entity
public class Entity {

  @EmbeddedId
  private MyId id;

  // not a part of Entity but a part of OtherEntity
  private String lookedUpValue;

}

public class MyId {
   private String firstField;
   private String secondField;
}

Таблица выглядит следующим образом:

ENTITY
  FIRSTFIELD (PK)
  SECONDFIELD (PK)
  // etc.

public class OtherEntity {
  private String firstField;
  private String value;
}

Таблица выглядит следующим образом:

OTHERENTITY
  VALUE (PK)
  FIRSTFIELD 
  //etc.
}

Когда я читаю Entity, я хочу, чтобыбыть LEFT JOIN, чтобы заполнить его поле lookUpValue, где Entity.id.firstField = OtherEntity.firstField, то есть в SQL это будет:

Select ENTITY.FIRSTFIELD, ENTITY.SECONDFIELD, OTHERENTITY.VALUE 
from ENTITY
left join OTHERENTITY
ON ENTITY.FIRSTFIELD = OTHERENTITY.FIRSTFIELD

Таким образом, экземпляры Entity будут заполнены всеми этими полями.

Возможно ли это,или вы рекомендуете другой подход?Чтение OtherEntity как поля на каждом объекте также может работать, но поскольку MyId не отображается на OtherEntity, я не вижу, как этого добиться.Большое спасибо.

Ответы [ 2 ]

1 голос
/ 16 марта 2012

Способ ссылки на OtherEntity в Entity с помощью аннотации JoinColumn, код которой приведен ниже в Entity.

@OneToOne(optional="true")
@JoinColumn(name="FIRSTFIELD",referencedColumnName="FIRSTFIELD")
OtherEntity otherEntity;
0 голосов
/ 27 января 2012

Возможно, вы захотите использовать выражения конструктора JPQL здесь.

По сути, вы создаете DTO со всеми необходимыми полями и используете его конструктор (с NEW) в запросе.

...