简体   繁体   English

在Hibernate中获取一对多对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM