Невозможно получить список, используя критерии - PullRequest
0 голосов
/ 29 августа 2018
public static List<Image> getList(int userId) {
      Session session = HibernateUtil.openSession();
      Transaction tx = null;
      List<Image> results = null;
      try {
      tx = session.beginTransaction();

      Criteria crit = session.createCriteria(Image.class);
      crit.add(Restrictions.eq("userID",new Integer(userId)));
      results = crit.list();

      tx.commit();
      }
      catch (HibernateException e) {
          System.out.println("Problem in retrieving data from database");
             if (tx!=null) tx.rollback();
             e.printStackTrace(); 
          } finally {
             session.close(); 
          }

    return results;

  }

Класс изображения

@Entity
@Table(name = "image")
public class Image {
    @Id
    @Column(name = "userId")
    int userID;
    @Id
    @Column(name = "name")
    String name;
    @Column(name = "size")
    double size;
    @Column(name = "preview")
    byte[] preview;

    public int getUserID() {
        return userID;
    }

    public void setUserID(int userID) {
        this.userID = userID;
    }

    public String getName() {
        return name;
    }

    public Image() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Image(int userID, String name, double size, byte[] preview) {
        super();
        this.userID = userID;
        this.name = name;
        this.size = size;
        this.preview = preview;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSize() {
        return size;
    }

    public void setSize(double size) {
        this.size = size;
    }

    public byte[] getPreview() {
        return preview;
    }

    public void setPreview(byte[] preview) {
        this.preview = preview;
    }

}

Это моя база данных enter image description here

Изображение - это объект, имеющий следующие атрибуты: идентификатор пользователя, имя, размер, предварительный просмотр.

userId + Имя изображения - это составной первичный ключ Я выбрал все строки, которые имеют userId = 1 Когда я перебираю полученный список. Я получаю AAdhar (который является первой записью в базе данных) отображается 6 раз вместо разных имен каждый раз. Я не могу понять проблему.

Решение : Код отредактированного правильного изображения Класс создать класс ImagePK как уже упоминалось

 @Entity
    @Table(name = "image")
    @IdClass(ImagePK.class)
    public class Image {
        @Id
        @Column(name = "userId")
        int userID;
        @Id
        @Column(name = "name")
        String name;
        @Column(name = "size")
        double size;
        @Column(name = "preview")
        byte[] preview;
    ……}

1 Ответ

0 голосов
/ 29 августа 2018

Я думаю, что вы создаете составной первичный ключ неправильно. Вы можете создать составной первичный ключ в спящем режиме, как показано ниже -

public class ImagePK implements Serializable {
    protected Integer userID;
    protected String name;

    public ImagePK() {}

    public ImagePK(Integer userID, String name) {
        this.userID = userID;
        this.name = name;
    }
    // equals, hashCode
}

Используйте @IdClass аннотацию в вашем Image классе сущности

@Entity
@Table(name = "image")
@IdClass(ImagePK.class)
public class Image {
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...