Обработка запросов для нулевой ссылки в Hibernate - PullRequest
0 голосов
/ 13 декабря 2011

Я использую спящий режим, и у меня есть сущность, подобная

@Entity
@Table(name = "MyEntity")
Class MyEntity {
        @Id
    @GeneratedValue
    private long id;

    @Column(name = "NAME")
    private String name;

    //some more attributes here 

        @OneToOne
    @JoinColumn(name = "PARENT_ID")
        MyEntity parent;

}

У меня есть одна запись в базе данных

id   |  name | parent_id 

125 |   n1  |   null

и когда я пытаюсь получить эту запись с помощью hibernate Query

Select e.id,e.name,e.parent.name from MyEntity e where e.id =125

этот запрос возвращает мне ноль записей. Потому что родитель здесь нулевой, поэтому есть ли способ справиться с такой ситуацией. спасибо в advc.

Ответы [ 2 ]

5 голосов
/ 13 декабря 2011

В вашем случае Hibernate неявно использует внутреннее соединение, которое ничего не возвращает, когда одна из сторон равна null.

Вы можете указать Hibernate использовать левое внешнее соединение следующим образом:

select e.id, e.name, p.name from MyEntity e left join e.parent p where e.id = 125
0 голосов
/ 13 декабря 2011

Как говорили другие, это приводит к внутреннему объединению ...

Вы можете добавить следующие свойства в спящий режим:

hibernate.show_sql=true
hibernate.format_sql=true

Таким образом, вы сможете узнать, что пытается сделать hibernate, и сами заметите такие проблемы ...

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

Если вам когда-нибудь понадобятся параметры метода, посмотрите на это: Hibernate показать реальный SQL

Вы могли бы также использовать API Criteria, который довольно прост и мощен в использовании и обслуживании, когда нет соединений в каждом направлении.

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