gpt4 book ai didi

java - Hibernate 加入两个表并获取所有记录?

转载 作者:可可西里 更新时间:2023-11-01 06:42:48 25 4
gpt4 key购买 nike

I have two entity class Category and Events.I need to join both the tables and fetch all records which matching the given condition

我对此的 sql 查询

SELECT * FROM category c  inner join `events` e on e.category_i=c.category_id where c.parent_category_id=1;

我如何将此 sql 查询转换为 hql 并获取数据?我在下面尝试但没有得到结果?我对 hibernate 还很陌生

Events entity class for hibernate mapping

import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;

/**
* The persistent class for the user database table.
*
*/
@Entity
@Table(name = "events")
public class Events implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "event_id")
private int eventId;

@Column(name = "event_name")
private String eventName;

@Column(name = "event_description")
private String eventDescription;

@Column(name = "category_i")
private Integer categoryI;






public Integer getCategoryI() {
return categoryI;
}

public void setCategoryI(Integer categoryI) {
this.categoryI = categoryI;
}

@Column(name = "is_trending_event")
private Integer isTrendingEvent;

@Column(name = "image_url")
private String imageUrl;

private Integer status;

@Column(name = "created_date")
@Temporal(javax.persistence.TemporalType.DATE)
private Date createdDate;

@Column(name = "last_updated_date")
@Temporal(javax.persistence.TemporalType.DATE)
private Date lastUpdatedDate;

public Date getCreatedDate() {
return createdDate;
}

public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}

public Date getLastUpdatedDate() {
return lastUpdatedDate;
}

public void setLastUpdatedDate(Date lastUpdatedDate) {
this.lastUpdatedDate = lastUpdatedDate;
}

public int getEventId() {
return eventId;
}

public void setEventId(int eventId) {
this.eventId = eventId;
}

public String getEventName() {
return eventName;
}

public void setEventName(String eventName) {
this.eventName = eventName;
}

public String getEventDescription() {
return eventDescription;
}

public void setEventDescription(String eventDescription) {
this.eventDescription = eventDescription;
}



public Integer getIsTrendingEvent() {
return isTrendingEvent;
}

public void setIsTrendingEvent(Integer isTrendingEvent) {
this.isTrendingEvent = isTrendingEvent;
}

public String getImageUrl() {
return imageUrl;
}

public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}

public Integer getStatus() {
return status;
}

public void setStatus(Integer status) {
this.status = status;
}

}

Category entity

import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;

/**
* The persistent class for the user database table.
*
*/
@Entity
@Table(name = "category")
public class Category implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "category_id")
private int categoryId;

@Column(name = "category_name")
private String categoryName;

@Column(name = "parent_category_id")
private Integer parentCategoryId;

@Column(name = "created_date")
@Temporal(javax.persistence.TemporalType.DATE)
private Date createdDate;

@Column(name = "last_updated_date")
@Temporal(javax.persistence.TemporalType.DATE)
private Date lastUpdatedDate;


@ManyToOne
@JoinTable(name="events", joinColumns = @JoinColumn(name="category_i"))
private Events events;

public int getCategoryId() {
return categoryId;
}

public void setCategoryId(int categoryId) {
this.categoryId = categoryId;
}

public String getCategoryName() {
return categoryName;
}

public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}

public Integer getParentCategoryId() {
return parentCategoryId;
}

public void setParentCategoryId(Integer parentCategoryId) {
this.parentCategoryId = parentCategoryId;
}

public Date getCreatedDate() {
return createdDate;
}

public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}

public Date getLastUpdatedDate() {
return lastUpdatedDate;
}

public void setLastUpdatedDate(Date lastUpdatedDate) {
this.lastUpdatedDate = lastUpdatedDate;
}

}

Fetch category method

public List<Object[]> getCategoryList(int id) throws SQLException, ClassNotFoundException, IOException {
List<Object[]> groupList = null;
try {
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("select e from Category e inner join e.events where e.parentCategoryId=1");
//query.setParameter("id", id);
groupList = query.list();
} catch (Exception e) {
}
return groupList;
}

最佳答案

使用ORM 时需要考虑Java 对象。工具。

根据您的问题,我认为您尝试编写的查询类似于:

public List<Category> getCategoryList(int id) {
List<Category> groupList;
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("select c from Category c join fetch c.events where c.parentCategory.categoryId = 1");
//query.setParameter("id", id);
groupList = query.list();
return groupList;
}

使用 ORM 的好处之一是它可以为您计算出完整的连接查询。

为此,您需要按如下方式更新您的类模型:

import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;

@Entity
@Table(name = "events")
public class Event implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "event_id")
private int eventId;

@Column(name = "event_name")
private String eventName;

@Column(name = "event_description")
private String eventDescription;

@ManyToOne
@JoinColumn(name = "category_i")
private Category category;

@Column(name = "is_trending_event")
private Integer isTrendingEvent;

@Column(name = "image_url")
private String imageUrl;

private Integer status;

@Column(name = "created_date")
@Temporal(javax.persistence.TemporalType.DATE)
private Date createdDate;

@Column(name = "last_updated_date")
@Temporal(javax.persistence.TemporalType.DATE)
private Date lastUpdatedDate;

...

}

import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;

@Entity
@Table(name = "category")
public class Category implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "category_id")
private int categoryId;

@Column(name = "category_name")
private String categoryName;

@ManyToOne
@JoinColumn(name="parent_category_id")
private Category parentCategory;

@Column(name = "created_date")
@Temporal(javax.persistence.TemporalType.DATE)
private Date createdDate;

@Column(name = "last_updated_date")
@Temporal(javax.persistence.TemporalType.DATE)
private Date lastUpdatedDate;

@OneToMany(mappedBy="category")
private List<Event> events;

...

}

关于java - Hibernate 加入两个表并获取所有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31509568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com