java getresultlist_java – Hibernate – TypedQuery.getResultList()返...

以下是对问题的更多和更好的描述:

我做一个简单的选择查询.返回列表包含确切的记录/对象数,就像我在数据库中执行相同的查询一样,但问题是所有对象都相同/相同.

例如,这是DB中的结果(我删除了空值):

26801 01-JAN-00 7 31-DEC-99 7 Obere Kirchstr. 26 CH 8304 Walliselln

26801 01-JAN-00 2 31-DEC-99 2 Obere Kirchstr. 26 CH 8304 Walliselln

这是变量地址的内容,因为我可以在执行查询后的调试期间在Eclipse中看到它:

地址ArrayList(id = 81)

??elementData Object [10](id = 86)

????[0] DLDBAddress(id = 82)

????[1] DLDBAddress(id = 82)

????[2] null

????…

??modCount 1

??2号

DLDBAddress [persid = 26801,valPeriodStart = 1900-01-01,valPeriodEnd = 9999-12-31,addressNr = 7,addressType = 7,addressRow1 = null,addressRow2 = Obere Kirchstr. 26,addressRow3 = null,country = CH,postalCode = 8304,city = Walliselln,phoneNr = null,faxNr = null,sekretaryPhoneNr = null,alternatPhoneNr = null,pagerNr = null]

DLDBAddress [persid = 26801,valPeriodStart = 1900-01-01,valPeriodEnd = 9999-12-31,addressNr = 7,addressType = 7,addressRow1 = null,addressRow2 = Obere Kirchstr. 26,addressRow3 = null,country = CH,postalCode = 8304,city = Walliselln,phoneNr = null,faxNr = null,sekretaryPhoneNr = null,alternatPhoneNr = null,pagerNr = null]]

如您所见,这两个对象是相同的.他们应该与addressNr和addressType不同……

这是构建查询的代码段:

public static List findBy(EntityManager eM, Class boClass, String whereClause, String whereValue)

{

EntityManager entityManager = eM;

Query query = entityManager.createQuery("from " + boClass.getName() + " s where s." + whereClause + " = " + whereValue);

...

return (List) query.getResultList();

}

这是(非常简单)结果查询:

来自ch.ethz.id.wai.pdb.bo.DLDBAddress s其中s.persid = 26801

这是生成的查询:

Hibernate:

select

dldbaddres0_.PERSID as PERSID0_,

dldbaddres0_.ADRNUM as ADRNUM0_,

dldbaddres0_.ADRZEIL1 as ADRZEIL3_0_,

dldbaddres0_.ADRZEIL2 as ADRZEIL4_0_,

dldbaddres0_.ADRZEIL3 as ADRZEIL5_0_,

dldbaddres0_.ADRTYP as ADRTYP0_,

dldbaddres0_.ADRAUSWTEL as ADRAUSWTEL0_,

dldbaddres0_.ADRORT as ADRORT0_,

dldbaddres0_.ADRLAND as ADRLAND0_,

dldbaddres0_.ADRFAX as ADRFAX0_,

dldbaddres0_.ADRPSA as ADRPSA0_,

dldbaddres0_.ADRTEL as ADRTEL0_,

dldbaddres0_.ADRPLZ as ADRPLZ0_,

dldbaddres0_.ADRSEKTEL as ADRSEKTEL0_,

dldbaddres0_.BISDAT as BISDAT0_,

dldbaddres0_.VONDAT as VONDAT0_

from

NETHZ.V_DLDB_ADRESSE dldbaddres0_

where

dldbaddres0_.PERSID=26801

在这里实体:

@Entity

@Table(name = "V_DLDB_ADRESSE", schema="NETHZ")

public class DLDBAddress

{

@Id

@Column(name = "PERSID", insertable = false, updatable = false)

private Integer persid;

@Temporal(TemporalType.DATE)

@Column(name = "VONDAT", insertable = false, updatable = false)

private Date valPeriodStart;

@Temporal(TemporalType.DATE)

@Column(name = "BISDAT", insertable = false, updatable = false)

private Date valPeriodEnd;

@Column(name = "ADRNUM", insertable = false, updatable = false)

private Integer addressNr;

@Column(name = "ADRTYP", insertable = false, updatable = false)

private Integer addressType;

@Column(name = "ADRZEIL1", insertable = false, updatable = false)

private String addressRow1;

@Column(name = "ADRZEIL2", insertable = false, updatable = false)

private String addressRow2;

@Column(name = "ADRZEIL3", insertable = false, updatable = false)

private String addressRow3;

@Column(name = "ADRLAND", insertable = false, updatable = false)

private String country;

@Column(name = "ADRPLZ", insertable = false, updatable = false)

private String postalCode;

@Column(name = "ADRORT", insertable = false, updatable = false)

private String city;

@Column(name = "ADRTEL", insertable = false, updatable = false)

private String phoneNr;

@Column(name = "ADRFAX", insertable = false, updatable = false)

private String faxNr;

@Column(name = "ADRSEKTEL", insertable = false, updatable = false)

private String secretaryPhoneNr;

@Column(name = "ADRAUSWTEL", insertable = false, updatable = false)

private String alternatPhoneNr;

@Column(name = "ADRPSA", insertable = false, updatable = false)

private String pagerNr;

...

我错过了什么吗?

啊,我正在连接到Oracle DB.

提前致谢

弗朗切斯科

  • 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、付费专栏及课程。

余额充值