java - 使用 hsql 检索数据 - 多对一关系

标签 java hql

我定义了以下实体:BaseEntitymagasinarticle:

 @Entity(name = "magasin")
@Table(name = "magasin")
public class Magasin extends BaseEntity {

    private static final long serialVersionUID = 1L;


    @Basic
    @Size(min=5, max=100, message="The name must be between {min} and {max} characters")
    private String name;

    @OneToMany(cascade=CascadeType.ALL, mappedBy="magasin")
    @Valid
    private Set<Article> article;

    public String getName() {
        return name;
    }

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

    public Set<Article> getArticle() {
        return article;
    }

    public void setArticle(Set<Article> article) {
        this.article = article;
    }
}

@Entity(name="article")
@Table(name="article")
public class Article extends BaseEntity {

    private static final long serialVersionUID = 1L;

    @ManyToOne
    private Magasin magasin;

    @Basic
    @Size(min=5, max=100, message="The name must be between {min} and {max} characters")
    private String name;
    @Basic
    private float price;

    public Magasin getMagasin() {
        return magasin;
    }

    public void setMagasin(Magasin magasin) {
        this.magasin = magasin;
    }

    public String getName() {
        return name;
    }

    public void setName(String nom) {
        this.name = nom;
    }
    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }

}

 @MappedSuperclass
 public class BaseEntity {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;

public void setId(Integer id) {
    this.id = id;
}

public Integer getId() {
    return id;
}

public boolean isNew() {
    return (this.id == null);
}

}

如何创建 hql 查询以检索所选 magasin 的所有 文章

我试试这个

 @Override
public List<Article> findArticle(Magasin magasin) {
    String query = "From Article m where m.magasin.id = "+magasin.getId();
    System.out.print(query);
    Session session = getSessionFactory().getCurrentSession();
    if((session.createQuery(query).list()!=null) && (session.createQuery(query).list().size()!=0))
        return (List<Article>) session.createQuery(query).list();
    else
        return null;
  }

但它什么也没返回,始终为 null。我该如何解决它?

最佳答案

我不知道您的杂志 ID 的类型,因此请修改下面的代码。

首先获取 id 的 Magasin 实例:

Magasin mag = (Magasin)session.get(Magasin.class, id);

接下来您可以通过访问器访问 magasin mag 的文章

Set<Article> articles = mag.getArticle();

关于java - 使用 hsql 检索数据 - 多对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27484380/

相关文章:

Hibernate 从 HqlSqlWalker 抛出 NullPointerException

hibernate - 将域对象实例作为Map检索

Java 反射 : access private method inside inner class

java - 将长日期解析为月-日-年字符串的快速方法

java - 当嵌套类与封闭类的静态成员共享名称时,访问嵌套类的静态成员?

java - 当我尝试运行查询时出现异常。这是为什么?

java - java构造函数可以将接口(interface)作为参数吗

java - 初级 Java 循环

java - HQL - 内连接错误

java - 将 SELECT NEW CONSTRUCTOR 与不是来自表的参数一起使用