[英]Fetching One to Many object in Hibernate
I've the following two entities, 我有以下两个实体,
User 用户
@Entity
@EqualsAndHashCode
public class User extends BaseEntity{
@Getter @Setter
private String msid;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "sender")
@Getter
private List<Media> sentList;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "receiver")
@Getter
private List<Media> receivedList;
protected User(){
super();
}
public User(String yguid) {
this();
this.yguid = yguid;
this.receivedList = new ArrayList<>();
this.sentList = new ArrayList<>();
}
}
Media 媒体
@Entity
@EqualsAndHashCode
public class Media extends BaseEntity{
@Getter @Setter
private String mediaId;
@Getter @Setter
private String url;
@ManyToOne
@JoinColumn(name="sender")
@Getter @Setter
private User sender;
@ManyToOne
@JoinColumn(name="receiver")
@Getter @Setter
private User receiver;
public Media() {
super();
}
public Media(String mediaId, String url, User sender, User receiver) {
this();
this.mediaId = mediaId;
this.url = url;
this.sender = sender;
this.receiver = receiver;
}
}
Both inherit from a BaseEntity 两者都继承自BaseEntity
public abstract class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private final Long id;
public BaseEntity() {
id = null;
}
}
I want to fetch all Media for an user. 我想为用户获取所有媒体。 This is my code
这是我的代码
public List<Media> getReceivedMediaForUser(User user){
Session session = sessionFactory.openSession();
Query query = session.createQuery("FROM Media m WHERE m.receiver = :user");
//parse query to get result
session.close();
//
return null;
}
This doesn't compile, can someone help me form the right query and get the results. 这不会编译,有人可以帮助我进行正确的查询并获得结果。 I'm new to Spring and Hibernate.
我是Spring和Hibernate的新手。
You can do it as shown below (It is an example to follow not solution. Implement solution accordingly you requirements ), 您可以按如下所示进行操作(这是一个遵循非解决方案的示例。请根据需要实施解决方案),
Query query = session.createSQLQuery(
"select * from stock s where s.stock_code = :stockCode")
.addEntity(Stock.class)
.setParameter("stockCode", "7277");
List result = query.list();
Your solution could be 您的解决方案可能是
Session session = sessionFactory.openSession();
Query query = session.createQuery("select * FROM Media m WHERE m.receiver = :user")
.addEntity(Media.class)
.setParameter("user", "xyz");
List result = query.list();
session.close();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.