2016-02-07 3 views
1

У меня есть следующий класс:Hibernate FetchMode ВЫБРАТЬ против РЕГИСТРИРУЙТЕСЬ

@Entity 
public class TestContentElementResponse 
{ 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    protected Long id; 



    @OneToMany(mappedBy = "testContentElementResponse", cascade = CascadeType.ALL, orphanRemoval = false) 
    private Set<ResponseAttribute> associatedResponseAttributes = new HashSet<ResponseAttribute>(); 


    @ManyToOne 
    @JoinColumn(name = "userfulltestId", referencedColumnName = "id", nullable = false) 
    private UserFullTest userFullTest; 

    @ManyToOne 
    @JoinColumn(name = "testContentElementId", referencedColumnName = "id", nullable = false) 
    private TestContentElement testContentElement; 



    @OneToOne(cascade = CascadeType.ALL) 
    private TestContentElementScore testContentElementScore; 

    @ManyToOne 
    @JoinColumn(name = "userId", referencedColumnName = "id", nullable = false) 
    private User user; 

TestContentElementResponse.class представляет один ответ пользователя в тесте. Один тест может быть 30 вопросов, поэтому 30 ответов на пользователя.

Теперь я хочу вызвать ALL TestContentElementResponse для пользователя ONE (общий идентификатор UserFullTestId) и ALL ResponseAttributes для каждого TestContentElementResponse.

Я могу сделать это с помощью запроса критериев, но я не уверен, использовать ли SELECT или JOIN FetchMode. Я понимаю, что JOIN сделает один большой вызов в базе данных, и SELECT совершит много быстрых вызовов. Однако я не знаю, какие факторы помогают мне решить, какой метод оптимален.

(Конечно, я буду запускать тесты, но это будет только ответить, какой метод является оптимальным, это не объясняет, почему)

Помощь больш была бы оценена

ответ

2

Вот отличный обсуждение с некоторые конкретные примеры:

http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/

Если вы кодирование в «сырой SQL» (либо SQL заявлении или хранимые процедуры), то ответ, как правило, не слишком задумываясь: единый комплекс «выбрать/Join» запрос является почти всегда s предпочтительнее нескольких запросов.

Что касается Hibernate, ответ «join» равен обычно лучше, чем выбрать.

SUGGESTION: измените ваш spring.xml, чтобы включить «show_sql», и сравните результаты.

PS:

Две другие хорошие ссылки:

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