Вопрос:

Выбор объекта «Один ко многим» в Hibernate

java spring hibernate

125 просмотра

1 ответ

990 Репутация автора

У меня есть следующие две сущности,

пользователь

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

СМИ

@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;
  }
}

Оба наследуются от BaseEntity

public abstract class BaseEntity {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private final Long id;

  public BaseEntity() {
    id = null;
  }
}

Я хочу получить все медиа для пользователя. Это мой код

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;
  }

Это не компилируется, может кто-нибудь помочь мне сформировать правильный запрос и получить результаты. Я новичок в Spring и Hibernate.

Автор: Melissa Stewart Источник Размещён: 13.04.2017 06:11

Ответы (1)


-1 плюса

342 Репутация автора

Вы можете сделать это, как показано ниже (это пример для подражания, а не для решения. Внедрить решение в соответствии с вашими требованиями),

 Query query = session.createSQLQuery(
"select * from stock s where s.stock_code = :stockCode")
.addEntity(Stock.class)
.setParameter("stockCode", "7277");
List result = query.list();

Ваше решение может быть

    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();
Автор: Rahul Rabhadiya Размещён: 13.04.2017 06:15
Вопросы из категории :
32x32