这是对该问题的更多甚至更好的描述:
我做一个简单的选择查询。返回列表包含确切的记录/对象数,就好像我在数据库中进行相同的查询一样,但是问题在于所有对象都是相同/相同的。
例如,这是数据库中的结果(我删除了空值):
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瓦利塞伦
这是变量地址的内容,正如我在执行查询后的调试过程中可以在Eclipse中看到的那样:
地址ArrayList(id = 81)
elementData对象[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 <T> List<T> findBy(EntityManager eM, Class<T> boClass, String whereClause, String whereValue)
{
EntityManager entityManager = eM;
Query query = entityManager.createQuery("from " + boClass.getName() + " s where s." + whereClause + " = " + whereValue);
...
return (List<T>) query.getResultList();
}
这是(非常简单的)结果查询:
来自ch.ethz.id.wai.pdb.bo.DLDBAddress,其中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数据库。
在此先感谢Francesco
where dldbaddres0_.PERSID=26801
@Id
@Column(name = "PERSID", insertable = false, updatable = false)
您将PERSID定义为@Id,这是一个主键。它对于您的应用程序来说真的很独特吗?从行为来看不是。但是对于希伯来说一定是。
那么会发生什么:
问题内容: 据我了解(如果我错了,请纠正我),Hibernate使用对象引用来检查对象的相等性。当Hibernate识别同一数据库记录中有多个对象附加时,它将引发以下异常。 我的问题是,Hibernate是否使用方法检查对象是否相等(默认的equal方法使用对象引用)?如果为true,则重写的方法会改变Hibernate的行为吗? 注意:我的问题不是关于Hibernate持久对象中的实现或方法问题
我有以下代码: 问题:是否可以替换 d - *我对这个问题的标题不太清楚-如果有问题,请编辑。 谢啦
我有一个像这样的POJO: 我想将json反序列化为Pojo。问题是我的属性名与productType相同,但我可以预期有两种不同的返回类型或数据结构。 返回object 返回
问题内容: 我似乎在Hibernate中映射列表时遇到问题。在我们的项目中有一类用含有类与含有。 Hibernate 是否可以使用注释进行映射?我的意思是,因为它没有注释? 问候 问题答案: 用途: 资料来源: 7.2.3。基本类型和可嵌入对象的集合
问题内容: 假设我有类似的课程: 我想在A上过滤标准,在不同的子类属性上过滤两个过滤器,例如: 我想要做的是使用“或”子句将criteriaB和criteriaC组合在一起,例如: 我该怎么做?我在这里对API稍作绊脚石。 问题答案: 使用别名代替嵌套条件:
问题内容: 我有以下二维位图: 出于好奇,我想检查一下,如果它将使用整数而不是布尔值,它将占用多少空间。所以我检查了当前大小并得到 104 之后,我修改了 但仍然有 104 然后我决定看看仅用字符串我就能得到多少: ,仍然显示 104 这看起来很奇怪,因为我期望字符串列表列表浪费大量的内存,而不仅仅是布尔值。 显然我缺少有关getsizeof如何计算大小的信息。谁能解释我为什么得到这样的结果。 P