2016-12-30 1 views
0

Меня интересует использование Hibernate INNER JOINS, которые возвращают результат сущности/модели.Hibernate INNER JOIN, которые возвращают результат сущности/модели

В Hibernate Community Documentation, они пишут:

Или - если предположить, что класс семья имеет соответствующий конструктор - как фактические типизированный объект Java:

select new Family(mother, mate, offspr) 
     from DomesticCat as mother 
     join mother.mate as mate 
     left join mother.kittens as offspr 

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

Select new Participant(part, addr.adddressType) 
    from Participant part 
    INNER JOIN part.adddresses addr 

Должен ли я создать новый класс Java, скажем Participant_Address.java, что звучит так:

Select new Participant_Address (part, addr.adddressType) 
    from Participant part 
    INNER JOIN part.adddresses addr 

With constructor: 
    public Participant_Address(new Participant(...), String addressType) 
+0

взгляните на [это] (http://stackoverflow.com/questions/4027805/new-object-with-hq l) сообщение, на Ваш вопрос уже ответил –

+0

halfer ... Почему редактирование? – emm

ответ

0

Получил эту работу! Очень доволен ..

Создан новый класс:

Размещенные в моей папке Hibernate только для удобства/релевантности:

package echomarket.hibernate; 

public class ParticipantAddress implements java.io.Serializable { 

    private Participant part; 
    private String addressType; 

    public ParticipantAddress() { 
    } 

    public ParticipantAddress(Participant part, String addressType) { 
    this.part = part; 
    this.addressType = addressType; 
} 

    public Participant getPart() { 
    return part; 
} 

    public void setPart(Participant part) { 
    this.part = part; 
    } 

    public String getAddressType() { 
    return addressType; 
    } 

    public void setAddressType(String addressType) { 
    this.addressType = addressType; 
    } 

} 

Протестировано:

package echomarket.hibernate; 

import echomarket.hibernate.HibernateUtil; 
import java.util.List; 
import org.hibernate.Session; 
import org.hibernate.Transaction; 

public class TestHib { 

    public static void main(String[] args) { 
     Session session = null; 
    Transaction tx = null; 
    List result = null; 
     String query = null; 
    try { 
     session = HibernateUtil.getSessionFactory().getCurrentSession(); 
     tx = session.beginTransaction(); 
    try { 
    query = "SELECT new echomarket.hibernate.ParticipantAddress(part, addr.addressType) " 
       + " from Participant part " 
       + " INNER JOIN part.addresses addr " 
       + " WHERE addr.addressType = 'primary' AND part.participant_id = '603aec80-3e31-451d-9ada-bc5c9d75b569' GROUP BY part.participant_id, addr.addressType"; 
    System.out.println(query); 
     result = session.createQuery(query) 
      .list(); 
    tx.commit(); 
    } catch (Exception e) { 
     System.out.println("Error result/commit in TestHib"); 
     e.printStackTrace(); 
     tx.rollback(); 
    } finally { 
     tx = null; 
     session = null; 
    } 
    /// typically check that result is not null, and in my case that result.size() == 1 
    echomarket.hibernate.ParticipantAddress hold = (echomarket.hibernate.ParticipantAddress)result.get(0); 
    Participant pp = (Participant) hold.getPart(); /// Got my Participant record 
    System.out.println("wait"); /// put a break here so I could evaluate return on result, hold and pp 

    } 
} 

Я действительно надеюсь, что это помогает людям ...