Свойство спящего объекта, определенное запросом - PullRequest
1 голос
/ 02 сентября 2011

Я пытаюсь внедрить систему отслеживания изменений документов с помощью Java и Hibernate. Каждый мод для документа сохраняется с автором и отметкой времени. Чтобы получить создатель документа, мне нужен самый ранний мод. Вот оно:

@Entity
@Table(name="Modifications")
public class Modification
{
  String autor;
  Date dateTime;
  Document document;

  @ManyToOne
  public Document getDocument() {
     ...
  }

  // Author of this mod
  @Column(name="Autor")
  public String getAutor() {
      ...
  }

  // and other properties
}

@Entity
@Table(name="Documents")
public class Document
{
  private List<Modification> modifications;

  @OneToMany(mappedBy="document")
  public List<Modification> getModifications() {
    ...
  }

  // this property is question about. How should I implement this with hibernate? 
  //I don't want to store "autor" field in entity, 
  //it should be determined with query to modifications table. 
  // But I can't find any example of defining properties this way... 
  // So I need your advices :)
  public String getAutor() {
     ...
  }

  // other properties
}

Ответы [ 2 ]

1 голос
/ 03 сентября 2011

Полагаю, вы пытаетесь сделать это с помощью аннотаций.Вы можете попытаться установить @OrderBy в своем списке Модификаций, и ваша функция getAutor () получит первую (или последнюю) сущность.

Хотя мне больше нравится методология Томаса, чтобы лучше отделить эту логику.

1 голос
/ 02 сентября 2011

Я бы не реализовал запрос в методе getAutor(), по крайней мере, в сущности.Предприятия IMO не должны сами выполнять запросы.

Так почему бы вам просто не предоставить метод в какой-либо службе / DAO, который предоставляет автора по мере необходимости?В качестве альтернативы вы можете захотеть сделать временное поле для автора в документе и позволить ему заполнить дао.Таким образом, вам придется загружать автора только один раз и обращаться к информации несколько раз.

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