简体   繁体   中英

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

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.

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();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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