这是对问题的更多也许更好的描述:
我做了一个简单的选择查询。返回的列表包含确切数量的记录/对象,就像我在数据库中执行相同的查询一样,但问题是所有对象都是相同/相同的。
例如,这是数据库中的结果(我删除了空值):
26801 01-JAN-00 7 31-DEC-99 7 上基希斯特。 26 CH 8304 瓦利塞尔恩
26801 01-JAN-00 2 31-DEC-99 2 上基希斯特。 26 CH 8304 瓦利塞尔恩
这是变量地址的内容,正如我在执行查询后调试期间在 Eclipse 中看到的那样:
地址ArrayList (id=81)
elementData 对象[10] (id=86)
[0] DLDB地址 (id=82)
[1] DLDB地址(id=82)
[2] 空
...
模计数 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、国家=CH、邮政编码=8304、城市=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、国家=CH、邮政编码=8304、城市=Walliselln、phoneNr=null、faxNr=null、sekretaryPhoneNr=null、alternatPhoneNr=null、pagerNr=null]]
正如您所看到的,这两个对象是相同的。相反,它们应该不同于 addressEr 和地址类型...
这是我构建查询的代码片段:
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,其中 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 数据库。
提前致谢
弗朗西斯科