2015-12-17 8 views
0

У меня есть класс Usuario. Пользователь имеет ассоциацию с UsuarioPerfil:Спящий режим Критерии снятия ассоциаций

public class Usuario{ 

    /*Attributes*/ 

    @OneToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "id_usuario_perfil", referencedColumnName = "id", foreignKey = @ForeignKey(name = "fk_usuario_id_usuario_perfil")) 
    @Getter 
    @Setter 
    private UsuarioPerfil usuarioPerfil; 

    } 

    public class UsuarioPerfil{ 

    /*Attributes*/ 
    } 

Я выполнение запросов с использованием критериев, а именно:

Session sessao = this.getEntityManager().unwrap(Session.class); 
    sessao.createCriteria(Usuario.class).list(); 

Однако, в некоторых случаях список пожеланий не приходит в UsuarioPerfil данные лиц, только пользователь , Как я могу выполнить это, используя критерии Hibernate?

Примечание: Я знаю, что это возможно с помощью Hibernate или JPA Query

ответ

0

Я не верю, что можно явно делать то, что вы просите с Criteria API Hibernate, потому что, как правило, общепринятой практикой, чтобы сделать ассоциации LAZY и установить их до EAGER на индивидуальной основе.

Таким образом, изменить отображение использовать fetch = FetchType.LAZY, а затем в тех случаях, когда необходимо объединение в запросе, необходимо указать как:

criteria.setFetchMode("usuarioPerfil", FetchMode.JOIN); 

Если у вас есть доступ к EntityGraph аннотациями JPA, я настоятельно рекомендую вы также смотрите на них. Как минимум, вы можете, по крайней мере, взглянуть на концепцию Hibernate FetchProfile, потому что они идут по пути определения стратегий выборки по имени, что помогает значительно улучшить код и запросы.

+0

Большое спасибо @Naros, он отлично работал. Это было именно то, что я искал. – Luciano

Смежные вопросы