отображение правил гибернации - PullRequest
1 голос
/ 09 сентября 2011

Можно ли сделать однозначное сопоставление со свойством, не используя первичные ключи? По сути, я хочу иметь свойство в своем классе «Parent», которое содержит только одну ссылку на одного из его дочерних элементов на основе некоторого правила. Например, это может быть «последний добавленный ребенок». Я знаю, что это довольно просто сделать с запросами, но возможно ли иметь «интеллектуальные» свойства? Так что вам не нужно ничего писать, кроме .load (Parent.class, pk), а затем работать с экземпляром.

Тот же вопрос относится к отношениям один-ко-многим, возможно ли применить правила и для этого? И, наконец, возможно ли объединить эти правила с параметрами для getmethod?

Таким образом, вы можете использовать метод getChildren (from, to):)

Ответы [ 2 ]

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

Я бы попробовал использовать атрибут формула .Это позволит вам определять более сложные отображения, используя SQL, столбцы или другие выражения.Мне придется больше разбираться в этом, когда я вернусь домой, но вот несколько примеров \ статей, с которых можно начать.По всей видимости, в исходном коде есть примеры на org.hibernate.test.onetooneformula

Сообщение форума о формулах "многие к одному"

Статья формул O'Reilly Hibernate 3

Примеры отображений в спящем режиме

0 голосов
/ 10 сентября 2011

Спящие сущности являются объектами Java.Ничто не мешает вам писать логику в эти объекты.На самом деле это хорошая вещь, если вы делаете.Вы можете получить что-то вроде этого:

@Entity
public class Parent {
    ...
    @OneToMany
    private Set<Child> children;
    ...

    public Set<Child> getChildren() {
        if (children == null) {
            children = new HashSet<Child>();
        }

        return children;
    }

    public Child getLastAddedChild() {
        for(Child child: getChildren()) {
            ... logic ...
        }
        return lastAddedChild;
    }
}

Обратите внимание, что эта реализация не оптимизирована, это всего лишь пример.Но вы можете делать все что угодно, например, иметь поле @ Transient для хранения последнего добавленного потомка (используя ленивую инициализацию в методе getLastAddedChild ()), или, возможно, скрыть свою коллекцию и использовать метод для добавлениядети к вашему объекту и т. д.

Как я уже говорил, спящие сущности - это Объекты.В хорошем ОО-дизайне с реальными объектами связано поведение.Я бы посоветовал вам провести исследование DDD (доменно-управляемый дизайн).

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