Как получить Entity на основе значения поля объекта-члена, а не ID объекта-члена - PullRequest
0 голосов
/ 10 октября 2018

У меня есть три класса, и код для них отображается ниже

Класс запросов :

@Entity
public class Enquiry 
{
  @Id
  @GeneratedValue
  private int id;

  private String name;

  private String discription;

  private int status;

  @Temporal(TemporalType.DATE)
  private Date enquiryDate;
}

Класс пользователей :

 @Entity
 public class User 
 {
   @Id
   @GeneratedValue
   private int id;

   private String name;

   private String userId;

   private String password;
 }

UserEnquiryUserEnquiryMapping Class :

@Entity
public class UserEnquiryMapping 
{
   @Id
   @GeneratedValue
   private int id;

   @ManyToOne
   private User user;

   @ManyToOne
   private Enquiry enquiry;
}

Теперь предположим, что если мы хотим получить Enquiry(s) для определенного User, чем мы можем легко получить его, передавUser object и hibernate сгенерируют запрос, используя поле id из User объекта, и код для того же сценария упомянут ниже.

EntityManager entityManager = session.getEntityManagerFactory().createEntityManager();
CriteriaBuilder builder = entityManager.getCriteriaBuilder();

CriteriaQuery<UserEnquiryMapping> criteria = builder.createQuery(UserEnquiryMapping.class);
Root<UserEnquiryMapping> root = criteria.from(UserEnquiryMapping.class);
criteria.select(root);
criteria.where(builder.equal(root.get("user"), user));

userEnquiries = entityManager.createQuery(criteria).getResultList();

Но мое требование - я хочу получить запросы пользователяна основе имени пользователя или мы можем сказать, что я хочу сгенерировать запрос, подобный этому

 Select * from UserEnquiryMapping inner join Enquiry on UserEnquiryMapping.Enquiry_ID = Enquiry.ID inner join User on UserEnquiryMapping.User_ID = User.ID where User.name="Test";

Как я могу это сделать?

1 Ответ

0 голосов
/ 10 октября 2018
builder.equal(root.get("user").get("name"),user.getName()); 

рад, что это поможет вам!

...