BAEL-4887: fetching multiple entities in JPA query (#10803)

This commit is contained in:
Maciej Główka
2021-05-25 21:48:22 +02:00
committed by GitHub
parent c24379b927
commit 27c53fd6de
6 changed files with 240 additions and 0 deletions
@@ -0,0 +1,43 @@
package com.baeldung.jpa.returnmultipleentities;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.util.Objects;
@Entity
public class Channel {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String code;
private Long subscriptionId;
public void setCode(String code) {
this.code = code;
}
public String getCode() {
return code;
}
public void setSubscriptionId(Long subscriptionId) {
this.subscriptionId = subscriptionId;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Channel channel = (Channel) o;
return Objects.equals(id, channel.id) && Objects.equals(code, channel.code) && Objects.equals(subscriptionId, channel.subscriptionId);
}
@Override
public int hashCode() {
return Objects.hash(id, code, subscriptionId);
}
}
@@ -0,0 +1,23 @@
package com.baeldung.jpa.returnmultipleentities;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import java.util.List;
public class ReportRepository {
private final EntityManagerFactory emf;
public ReportRepository() {
emf = Persistence.createEntityManagerFactory("jpa-h2-return-multiple-entities");
}
public List<Object[]> find(String email) {
EntityManager entityManager = emf.createEntityManager();
Query query = entityManager.createQuery("SELECT c, s, u FROM Channel c, Subscription s, User u WHERE c.subscriptionId = s.id AND s.id = u.subscriptionId AND u.email=:email");
query.setParameter("email", email);
return query.getResultList();
}
}
@@ -0,0 +1,41 @@
package com.baeldung.jpa.returnmultipleentities;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.util.Objects;
@Entity
public class Subscription {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String code;
public void setCode(String code) {
this.code = code;
}
public String getCode() {
return code;
}
public Long getId() {
return id;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Subscription subscription = (Subscription) o;
return Objects.equals(id, subscription.id) && Objects.equals(code, subscription.code);
}
@Override
public int hashCode() {
return Objects.hash(id, code);
}
}
@@ -0,0 +1,29 @@
package com.baeldung.jpa.returnmultipleentities;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String email;
private Long subscriptionId;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public void setSubscriptionId(Long subscriptionId) {
this.subscriptionId = subscriptionId;
}
}