オブジェクトの等価性から得られる結果を理解しようとしています...まず、db の 2 つの 2 つのテーブルから重複オブジェクトをフィルタリングする必要がある問題について説明しましょう (Hibenate すべての cluse が設定されています) プリセット条件は、firstName、lastName、dateOfbirth です
package com.equality.types;
import com.google.common.base.Objects;
import java.util.Date;
public class AsignoreTypes{
private String firstname;
private String lastname;
private Date doa;
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public Date getDoa() {
return doa;
}
public void setDoa(Date doa) {
this.doa = doa;
}
/* @Override
public boolean equals(Object obj) {
if (obj instanceof AsignoreTypes == false) {
return false;
}
if (this == obj) {
return true;
}
AsignoreTypes other = (AsignoreTypes) obj;
return new EqualsBuilder().append(this.firstname , other.firstname)
.append(this.lastname, other.lastname)
.append(this.doa , other.doa).isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder().append(this.firstname)
.append(this.lastname)
.append(this.doa)
.hashCode();
}
*/
@Override
public int hashCode(){
return Objects.hashCode(firstname, lastname, doa);
}
@Override
public boolean equals(final Object obj){
if(obj instanceof AsignoreTypes){
final AsignoreTypes other = (AsignoreTypes) obj;
return Objects.equal(firstname, other.firstname)
&&Objects.equal(lastname, other.lastname)
&& Objects.equal(doa, other.doa);
} else{
return false;
}
}
したがって、私のサービス クラスでは、2 つのテーブルに対して Query を呼び出し、オブジェクト リストを作成します。
リストの 1 つで、2 番目のリストにネストされた反復を作成します
したがって、私のサービス クラスでは、2 つのテーブルに対して Query を呼び出し、カスタム リストを作成します。リストとオブジェクトを反復処理します。
したがって、私のサービス クラスでは、2 つのテーブルに対して Query を呼び出し、カスタム リストを作成します。リストとオブジェクトを反復処理します。
Session session = service.getDataServiceManager().getSession();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Query query = session.createQuery("select upper(ass.firstName), upper(ass.lastName), ass.doa from AssignorInfo ass");
List < Object > ass1 = null;
ass1 = query.list();
List < AsignoreTypes > res1 = null;
res1 = new ArrayList < AsignoreTypes > ();
Iterator < Object > it = ass1.iterator();
while (it.hasNext()) {
Object[] row = (Object[]) it.next();
AsignoreTypes ass = new AsignoreTypes();
if (row[0] != null) ass.setFirstname(row[0].toString());
if (row[1] != null) ass.setLastname(row[1].toString());
if (row[2] != null) ass.setDoa(formatter.parse(row[2].toString()));
res1.add(ass);
}
log(INFO, "List one size " + res1.size());
Query q = session.createQuery("select upper(g.fname), upper(g.lname), g.doa from GeneralInfo g where g.arbitrator like '%Bulel%' ");
List < Object > ass2 = null;
ass2 = q.list();
log(INFO, " Size from wizard " + ass2.size());
List < AsignoreTypes > res2 = null;
res2 = new ArrayList < AsignoreTypes > ();
Iterator < Object > iterator = ass2.iterator();
while (iterator.hasNext()) {
Boolean f = null;
Object[] row = (Object[]) iterator.next();
AsignoreTypes ass = new AsignoreTypes();
if (row[0] != null) ass.setFirstname(row[0].toString());
if (row[1] != null) ass.setLastname(row[1].toString());
if (row[2] != null) ass.setDoa(formatter.parse(row[2].toString()));
for (AsignoreTypes a1: res1) {
f = ass.equals(a1);
}
if (f == false) {
res2.add(ass);
log(INFO, "Got matchig element " + ass.getLastname());
}
}
log(INFO, "List tow size " + res2.size() + " List hash set size ");
HashSet < AsignoreTypes > asigors = new HashSet < AsignoreTypes > ();
HashSet < AsignoreTypes > wiz = new HashSet < AsignoreTypes > ();
asigors.addAll(res1);
wiz.addAll(res2);
wiz.removeAll(asigors);
log(INFO, "Added to hash set " + asigors.size());
log(INFO, "Added assignors to the list " + wiz.size());
だからここに私が理解していない部分があります私はオブジェクトに等価メソッドを実装していますが、等価は1つまたは2つの一致を返します... 2012-09-01 18:49:09,910 INFO [com.equality.service.CopareToServices] - (スレッド1008 CopareToServices.compareObjects を呼び出します) 等値メソッドは 1 つの重複レコードのみを検出しました >>>
しかし、最後にリストにremoveAllを実装すると、結果
そして、これは heshSet 2012-09-01 18:49:09,918 INFO [com.equality.service.CopareToServices] に removeAll を実装した後です - (スレッド 1008 は CopareToServices.compareObjects を呼び出します)
171個の重複が削除されましたが、これは正しいように聞こえます...
リストにremoveAllを実装するとリストが適切にフィルタリングされるのに、等式メソッドが機能しないのはなぜですか
同じ出力であまりにもApache Commonsでイコールビルダーを試してみました
誠意をこめて私が得ることができる助けをApriciateします