編寫DAO方法以通過電子郵件檢索appUsers,其中電子郵件是EmailAddress類。一直在尋找如何做到這一點無濟於事。有沒有辦法根據自定義對象的值檢索記錄?這似乎工作時,我有一個屬性是String或int類型,但我如何獲得匹配我的EmailAddress對象的記錄?通過自定義對象屬性查找Hibernate
試過以下,但不工作:
public List<AppUser> findByEmail(EmailAddress email) {
log.debug("finding " + getTable() + " instance by example");
AppUser appUser = new AppUser();
appUser.setEmail(email);
try {
List<AppUser> results = this.sessionFactory.getCurrentSession()
.createCriteria(AppUser.class)
.add(Example.create(appUser)).list();
log.debug("find by example successful, result size: "
+ results.size());
return results;
} catch (RuntimeException re) {
log.error("find by example failed", re);
throw re;
}
}
這裏的是我的APPUSER類
@Entity
@Table(name="AppUser")
public class AppUser extends BaseEntity {
...
@Column(name="Email")
private EmailAddress email;
...
/**
* Gets this AppUser's associated email
*
* @return this AppUser's associated email
*/
public EmailAddress getEmail() {
return this.email;
}
/**
* Sets this AppUser's associated email
*
* @param email this AppUser's associated email
*/
public void setEmail(EmailAddress email) {
this.email = email;
}
}
的相關部分這裏是我的EmailAddress的類
public class EmailAddress implements Serializable {
private static final long serialVersionUID = -6999956021169014445L;
private static final String AT_DELIMTER = "@";
private String emailAddress;
public EmailAddress() {}
public EmailAddress(String emailAddress) {
setEmailAddress(emailAddress);
}
public String getEmailAddress() {
return emailAddress;
}
public void setEmailAddress(String emailAddress) throws IllegalArgumentException {
if (StringUtils.isEmpty(emailAddress))
throw new IllegalArgumentException("Parameter emailAddress cannot be blank.");
else if (!EmailValidator.getInstance(true).isValid(emailAddress))
throw new IllegalArgumentException("The email address " + emailAddress + " is not valid.");
this.emailAddress = emailAddress;
}
public String getUser() {
return this.emailAddress.substring(0, this.emailAddress.indexOf(AT_DELIMTER));
}
public String getDomain() {
return this.emailAddress.substring(this.emailAddress.indexOf(AT_DELIMTER) + 1);
}
public String toString() {
return emailAddress;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((emailAddress == null) ? 0 : emailAddress.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
EmailAddress other = (EmailAddress) obj;
if (emailAddress == null) {
if (other.emailAddress != null)
return false;
} else if (!emailAddress.equals(other.emailAddress))
return false;
return true;
}
}
謝謝!
嗯......一定有別的事情就在這裏,因爲這仍然不返回任何結果。這真的很奇怪,因爲當我將屬性字段作爲字符串時,它起作用,但只要我將其更改爲EmailAddress,它就不會返回任何結果。假設Hibernate可以進行這種翻譯,我錯了嗎? – malificent 2014-12-04 15:58:56
檢查我更新的答案。 – 2014-12-04 16:05:09
啊謝謝!得到了那個工作! – malificent 2014-12-04 17:05:13