2017-03-03 16 views
0

整個對象,我有以下類別:獲取主鍵,而不是在一對多的關係

@Entity 
@Table(name = "elements") 
@Inheritance(strategy=InheritanceType.JOINED) 
@XmlRootElement 
public abstract class Elements implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "idelement") 
    private Integer idElement; 

    @Basic(optional = false) 
    @Column(name = "code") 
    private String code; 

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "idElement") 
    @Fetch(value = FetchMode.SUBSELECT) 
    private Collection<Alarms> alarmsCollection; 

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "idElement") 
    @Fetch(value = FetchMode.SUBSELECT) 
    private Collection<ElementsHistorical> elementsHistoricalCollection; 

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST, mappedBy = "elementsCollection") 
    @Fetch(value = FetchMode.SUBSELECT) 
    private Collection<ElementsGroups> elementsGroupsCollection; 


    //Constructors, getters and setters 
} 

@Entity 
@Table(name = "alarms") 
@XmlRootElement(name = "Alarms") 
public class Alarms implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "idalarm") 
    private Integer idAlarm; 

    @JoinColumn(name = "idelement", referencedColumnName = "idelement") 
    @ManyToOne(optional = false) 
    private Elements idElement; 

    //Constructors, getters and setters 

} 

我創建了一個Web服務的球衣與CRUD操作的DAO類治療​​數據。通過這個實現,當我調用GET方法時,我得到​​之內的整個Elements對象。這就是所謂的DAO方法:

public List<Alarms> getAlarms(){ 
    Session session = SessionUtil.getSession();  
    Query query = session.createQuery("from Alarms"); 
    List<Alarms> alarms = query.list(); 
    session.close(); 
    return alarms; 
} 

我不希望這fetch = FetchType.EAGER提取類型,因爲我只需要的Elements的PK,但是經過一番研究,這是我發現讓我的服務工作的唯一辦法。 我試過thisthis的方法,但我一直無法使它工作。

回答

0

您可以在查詢中使用左外連接提取。

Query query = session.createQuery("from Alarms alarm left outer join fetch alarm.idElement element"); 

現在你可以保持fetch = FetchType.LAZY(這是默認值)。

+0

它沒有工作,返回的結果相同 – Juan

+0

前取不急於類似,它只是另一種方式來獲得渴望 –

+0

是的數據,但在這種情況下,你只有當你需要得到相關的對象。不是每次。 –

0

嘗試將@XmlTransient註釋添加到您要忽略的Elements類中的字段。 這樣的:

@Entity 
@Table(name = "elements") 
@Inheritance(strategy=InheritanceType.JOINED) 
@XmlRootElement 
public abstract class Elements implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "idelement") 
    private Integer idElement; 

    @Basic(optional = false) 
    @Column(name = "code") 
    @XmlTransient 
    private String code; 

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "idElement") 
    @Fetch(value = FetchMode.SUBSELECT) 
    @XmlTransient 
    private Collection<Alarms> alarmsCollection; 

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "idElement") 
    @Fetch(value = FetchMode.SUBSELECT) 
    @XmlTransient 
    private Collection<ElementsHistorical> elementsHistoricalCollection; 

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST, mappedBy = "elementsCollection") 
    @Fetch(value = FetchMode.SUBSELECT) 
    @XmlTransient 
    private Collection<ElementsGroups> elementsGroupsCollection; 


    //Constructors, getters and setters 
} 
0

您可以使用多選與Tuple,只能選擇特定的列。

CriteriaBuilder cb = entityManager.getCriteriaBuilder(); 
    CriteriaQuery<Tuple> cq = cb.createTupleQuery(); 
    Root<Alarms> root = cq.from(Alarms.class); 
    CollectionJoin<Object, Object> joinCollection = root.joinCollection("alarmsCollection"); 
    cq.multiselect(joinCollection.get("idElement")); 
    List<Tuple> tupleResult = entityManager.createQuery(cq).getResultList(); 
    for (Tuple t : tupleResult) { 
     Long idElement = (Long) t.get(0); 
    } 
相關問題