java对象不重复_java – Criteria.DISTINCT_ROOT_ENTITY不会阻止重复的对象

我有以下道法:

@Override

public List findAll() {

Session session = sessionFactory.getCurrentSession();

Criteria criteria = session.createCriteria(AdminRole.class);

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

return criteria.list();

}

其实我想从数据库检索所有条目.

有时我看到重复.当我用AdminRole添加用户时,会发生这种情况.

我已经看到,这是可能的,当我使用EAGER提取类型,这应该是修复添加以下行:

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);

但这并不能帮助我.

我的映射:

@Entity

@Table(name = "terminal_admin_role")

public class AdminRole {

@Id

@Column(name = "role_id",nullable = false,unique = true)

@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "user_id")

@SequenceGenerator(name = "user_id",sequenceName = "user_id")

private Long adminId;

@Column(name = "role")

private String role;

public AdminRole(String role) {

this.role = role;

}

public AdminRole() {

}

// get set

@Override

public String toString(){

return role;

}

@Override

public boolean equals(Object o) {

if (this == o) {

return true;

}

if (!(o instanceof AdminRole)) {

return false;

}

AdminRole adminRole = (AdminRole) o;

if (!role.equals(adminRole.role)) {

return false;

}

return true;

}

@Override

public int hashCode() {

return role.hashCode();

}

}

@Entity

@Table(name = "terminal_admin")

public class TerminalAdmin {

@ManyToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)

@JoinTable(name = "admin_role",joinColumns = {

@JoinColumn(name = "admin_id",nullable = false) },inverseJoinColumns = { @JoinColumn(name = "role_id",nullable = false) })

private Set adminRoles;

//...

}

附:

我无法切换提取类型.

我不想把这个列表放在一起.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下代码创建javax.persistence.criteria.Order对象: ``` CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<Entity> cq = cb.createQuery(Entity.class); Root<Entity> root = cq.from(Entity.class); cq.orderBy(cb.asc(root.get("fieldName"))); ``` 其中,`entityManager` 是一个 `javax.persistence.EntityManager` 对象,`fieldName` 是要排序的实体字段的名称。 ### 回答2: 在Java中,我们可以使用javax.persistence.criteria.CriteriaBuilder来创建javax.persistence.criteria.Order对象。 首先,我们需要获取EntityManager的实例,这可以通过EntityManagerFactory来获得。然后,我们使用EntityManager的getCriteriaBuilder()方法来获取CriteriaBuilder的实例。接下来,我们可以使用CriteriaBuilder的asc()方法或desc()方法来创建Order对象。 下面是创建Order对象的一个例子: ```java EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("examplePU"); EntityManager entityManager = entityManagerFactory.createEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<MyEntity> query = criteriaBuilder.createQuery(MyEntity.class); Root<MyEntity> root = query.from(MyEntity.class); Order order = criteriaBuilder.asc(root.get("myField")); query.orderBy(order); List<MyEntity> resultList = entityManager.createQuery(query).getResultList(); ``` 在上面的例子中,我们使用asc()方法创建了一个升序的Order对象,并将其传递给query对象的orderBy()方法。然后,通过调用entityManager的createQuery()方法来执行查询,并使用getResultList()方法获得结果列表。 需要注意的是,以上示例中的"examplePU"是一个持久单元的名称,需要根据具体的应用程序环境进行替换。此外,"MyEntity"是一个实体类的名称,代表我们希望查询的实体类型。"myField"是实体类的一个属性名,代表我们希望按照该属性进行排序。 总而言之,使用javax.persistence.criteria.CriteriaBuilder对象的asc()方法或desc()方法,我们可以很容易地创建javax.persistence.criteria.Order对象,并通过orderBy()方法将其添加到查询中,以实现对查询结果的排序。 ### 回答3: 在Java中,可以使用javax.persistence.criteria.CriteriaBuilder接口的asc和desc方法来创建javax.persistence.criteria.Order对象。 首先,需要获取一个CriteriaBuilder对象,可以通过EntityManager的getCriteriaBuilder方法来获取。然后可以使用CriteriaBuilder对象的asc和desc方法创建Order对象。 要创建一个升序排序的Order对象,可以使用asc方法,该方法接受一个Expression对象作为参数,表示要进行排序的字段。例如,可以这样创建一个按照名字字段升序排序的Order对象: ``` CriteriaBuilder builder = entityManager.getCriteriaBuilder(); Order order = builder.asc(root.get("name")); ``` 其中,root表示要查询的实体的根对象,get方法用于获取字段表达式。 要创建一个降序排序的Order对象,可以使用desc方法,用法和asc方法类似。例如,可以这样创建一个按照年龄字段降序排序的Order对象: ``` CriteriaBuilder builder = entityManager.getCriteriaBuilder(); Order order = builder.desc(root.get("age")); ``` 最后,可以将Order对象传递给CriteriaQuery对象的orderBy方法,以便将排序应用于查询结果。例如: ``` CriteriaQuery<User> query = builder.createQuery(User.class); query.select(root).orderBy(order); ``` 这样,在执行查询时,结果会按照指定的排序方式进行排序。 总之,要在Java中创建javax.persistence.criteria.Order对象,首先需要获取一个CriteriaBuilder对象,然后使用asc或desc方法创建Order对象,最后将Order对象应用于CriteriaQuery对象

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值