java - Hibernate 标准,两个实体

标签 java hibernate criteria

假设我有一个疑问:

从 EntityOne 中选择一个,从 EntityTwo 中选择两个 其中 one.id = Two.otherId AND Two.someValue = 2

我想使用 Criteria 工具对其进行转换,但不知道如何获取

提前致谢

最佳答案

以下是有关如何使用 Criteria 获取结果的代码:

EntityOne.java

@Entity
public class EntityOne {
    @Id
    @GeneratedValue
    private int id;
    private String name;
    @OneToMany(mappedBy = "entity", cascade=CascadeType.ALL)
    private Set<EntityTwo> entities = new HashSet<EntityTwo>();
    public EntityOne(String name) {
        this.name = name;
    }
    public void addEntity(EntityTwo entity) {
        this.entities.add(entity);
    }
    // Default constructor, setters & getters
}

EntityTwo.java

@Entity
public class EntityTwo {
    @Id
    @GeneratedValue
    int id;
    String name;
    @ManyToOne
    @JoinColumn(name = "entity_one_id")
    private EntityOne entity;
    public EntityTwo(String name) {
        this.name = name;
    }
    // Default constructor, setters & getters
}

将一些实体保存到数据库的代码:

    EntityOne eo1 = new EntityOne("Entity eo1");
    EntityTwo et1 = new EntityTwo("one");
    EntityTwo et2 = new EntityTwo("two");

    eo1.addEntity(et1);
    eo1.addEntity(et2);
    et1.setEntity(eo1);
    et2.setEntity(eo1);

    EntityOne eo2 = new EntityOne("Entity eo2");
    EntityTwo et3 = new EntityTwo("three");
    EntityTwo et4 = new EntityTwo("four");

    eo2.addEntity(et3);
    eo2.addEntity(et4);
    et3.setEntity(eo2);
    et3.setEntity(eo2);

    session.save(eo1);
    session.save(eo2);

现在是使用Criteria获取记录的代码:

    Criteria criteria = session.createCriteria(EntityOne.class, "e1");
    criteria.createAlias("e1.entities", "e2");
    criteria.add(Restrictions.eq("e2.name", "two"));

    List<EntityOne> entityList = criteria.list();
    for (EntityOne entityOne : entityList) {
        System.out.println(entityOne.getName());
        for (EntityTwo entity : entityOne.getEntities()) {
            System.out.println("->" + entity.getName());
        }
    }

输出将是:

Entity eo1
->two
->one

关于java - Hibernate 标准,两个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25510399/

相关文章:

java - 如何在 session 超时后使 Wicket 中的自动完成文本字段起作用

java - SolrJetty 日志记录 - 如何让自定义日志格式化程序正常工作?

java - 如何使用 apache.httpcomponents.httpclient 在 Elasticsearch 中执行搜索模板

java - 在 Spring Boot JPA 中,为什么我会得到 "Table already exists; SQL statement:"

java - hibernate jpa,有没有一种简单的方法来获取实体的依赖实体

java - Jpa 条件计数

java - JSONObject 类出现问题,未给出错误

java - 将 CriteriaQuery JOIN 添加到 CriteriaQuery 后进行修改

java - Apache 扭矩标准 : how to join a subquery

java - Oracle 序列不会从 Java/Hibernate 递增