내 응용 프로그램에 대해 Hibernate 3.5.6을 사용하고 있습니다.이 응용 프로그램에서 hbm.xml 파일을 사용하여 POJO를 데이터베이스 테이블 열에 매핑합니다.최대 절전 모드에서 빈의 원하는 속성 만 가져 오는 방법은 무엇입니까?
이 응용 프로그램에는 아래와 같은 사용자 bean이 있습니다.
public class User {
// login info
private long id;
private String type;
private String userName;
private String password;
private String securityQuestionStr;
private String securityAnswer;
// personal info
private String firstName;
private String middleName;
private String lastName;
/**
* <b>{@link GenderType} gender</b>
*/
private GenderType gender;
private Date dateOfBirth;
// other related info
/**
* <b>{@link UserType} userType</b>
*/
private UserType userType;
// contact info
private Long mobileNo;
private Long businessPhoneNo;
private Long homePhoneNo;
private Long faxNo;
private String email;
private String alternateEmail;
/**
* <b>{@link RegistrationStatus} userStatus</b>
*/
private RegistrationStatus userStatus;
/**
* <b>{@link Post} posts</b>
*/
private String securityAnswerHash;
private String passwordHash;
private String encryptedPassword;
private String encryptedSecurityAnswer;
private String nationality;
private String portal;
private float version;
private Date createdDate;
private User createdUser;
private String createdIP;
private Date lastModifiedDate;
private User lastModifiedUser;
private String lastModifiedIP;
private boolean recordStatus;
private String publicKey;
private String certificateName;
private String signPublicKey;
private String signCertificateName;
private boolean isEtoken;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSecurityQuestionStr() {
return securityQuestionStr;
}
public void setSecurityQuestionStr(String securityQuestionStr) {
this.securityQuestionStr = securityQuestionStr;
}
public String getSecurityAnswer() {
return securityAnswer;
}
public void setSecurityAnswer(String securityAnswer) {
this.securityAnswer = securityAnswer;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getMiddleName() {
return middleName;
}
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public GenderType getGender() {
return gender;
}
public void setGender(GenderType gender) {
this.gender = gender;
}
public Date getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
public UserType getUserType() {
return userType;
}
public void setUserType(UserType userType) {
this.userType = userType;
}
public Long getMobileNo() {
return mobileNo;
}
public void setMobileNo(Long mobileNo) {
this.mobileNo = mobileNo;
}
public Long getBusinessPhoneNo() {
return businessPhoneNo;
}
public void setBusinessPhoneNo(Long businessPhoneNo) {
this.businessPhoneNo = businessPhoneNo;
}
public Long getHomePhoneNo() {
return homePhoneNo;
}
public void setHomePhoneNo(Long homePhoneNo) {
this.homePhoneNo = homePhoneNo;
}
public Long getFaxNo() {
return faxNo;
}
public void setFaxNo(Long faxNo) {
this.faxNo = faxNo;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAlternateEmail() {
return alternateEmail;
}
public void setAlternateEmail(String alternateEmail) {
this.alternateEmail = alternateEmail;
}
public RegistrationStatus getUserStatus() {
return userStatus;
}
public void setUserStatus(RegistrationStatus userStatus) {
this.userStatus = userStatus;
}
public String getSecurityAnswerHash() {
return securityAnswerHash;
}
public void setSecurityAnswerHash(String securityAnswerHash) {
this.securityAnswerHash = securityAnswerHash;
}
public String getPasswordHash() {
return passwordHash;
}
public void setPasswordHash(String passwordHash) {
this.passwordHash = passwordHash;
}
public String getEncryptedPassword() {
return encryptedPassword;
}
public void setEncryptedPassword(String encryptedPassword) {
this.encryptedPassword = encryptedPassword;
}
public String getEncryptedSecurityAnswer() {
return encryptedSecurityAnswer;
}
public void setEncryptedSecurityAnswer(String encryptedSecurityAnswer) {
this.encryptedSecurityAnswer = encryptedSecurityAnswer;
}
public String getNationality() {
return nationality;
}
public void setNationality(String nationality) {
this.nationality = nationality;
}
public String getPortal() {
return portal;
}
public void setPortal(String portal) {
this.portal = portal;
}
public float getVersion() {
return version;
}
public void setVersion(float version) {
this.version = version;
}
public Date getCreatedDate() {
return createdDate;
}
public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}
public User getCreatedUser() {
return createdUser;
}
public void setCreatedUser(User createdUser) {
this.createdUser = createdUser;
}
public String getCreatedIP() {
return createdIP;
}
public void setCreatedIP(String createdIP) {
this.createdIP = createdIP;
}
public Date getLastModifiedDate() {
return lastModifiedDate;
}
public void setLastModifiedDate(Date lastModifiedDate) {
this.lastModifiedDate = lastModifiedDate;
}
public User getLastModifiedUser() {
return lastModifiedUser;
}
public void setLastModifiedUser(User lastModifiedUser) {
this.lastModifiedUser = lastModifiedUser;
}
public String getLastModifiedIP() {
return lastModifiedIP;
}
public void setLastModifiedIP(String lastModifiedIP) {
this.lastModifiedIP = lastModifiedIP;
}
public boolean isRecordStatus() {
return recordStatus;
}
public void setRecordStatus(boolean recordStatus) {
this.recordStatus = recordStatus;
}
public String getPublicKey() {
return publicKey;
}
public void setPublicKey(String publicKey) {
this.publicKey = publicKey;
}
public String getCertificateName() {
return certificateName;
}
public void setCertificateName(String certificateName) {
this.certificateName = certificateName;
}
public String getSignPublicKey() {
return signPublicKey;
}
public void setSignPublicKey(String signPublicKey) {
this.signPublicKey = signPublicKey;
}
public String getSignCertificateName() {
return signCertificateName;
}
public void setSignCertificateName(String signCertificateName) {
this.signCertificateName = signCertificateName;
}
public boolean isEtoken() {
return isEtoken;
}
public void setEtoken(boolean isEtoken) {
this.isEtoken = isEtoken;
}
} 나는, 데이타베이스에서 사용자를 가져 오기 할 때
는 지금, 나는 기준을 사용하거나 얻거나 부하 방법했다. 하지만 나는 최대 절전 모드로 생성 된 쿼리를 보았을 때 쿼리 길이가 너무 깁니다. 이것은 사용자 bean에 38 개의 속성이 있기 때문입니다. 모든 속성은 String 및 프리미티브 유형입니다 (속성 중 하나는 Has 유형이 아닙니다). -A 다른 bean 클래스)그러나 실제 필요한 ID는 10-12 또는 한 번에 20 개의 등록 정보 일 수 있습니다. 최대 절전 모드로 사용자 bean을 가져올 때 모든 등록 정보를 가져 오지 않으려합니다.
이 경우 나는 가져 오기만하려는 생성자에서 속성의 수를 제공 할 수있는 HQL을 보았습니다. 다음과 같이 :
Query query = session
.createQuery("select new User(id, userName) from User where id=?");
query.setParameter(0, 1l);
질의 길이가 짧은 그래서 ID와 사용자 이름을 가져올 만 쿼리를 발사하고 또한 내가에만 필요 속성을 얻었다.
하지만 매번 다른 유형의 속성을 사용하여 쿼리를 작성하는 것은 매우 어렵습니다. 또한 POJO 클래스에서 동일한 서명 생성자가 필요합니다. User 클래스에있는 일부 콜렉션 및 다른 Bean과 동시에 가져 오는 것이 더 어려울 수 있습니다.
그래서 모든 것이 아닌 필수 속성 (문자열 또는 기본 유형)에 대해서만 쿼리를 시작하기 위해 최대 절전 모드를 제한하는 다른 방법이 있는지 알고 싶습니다.
헤이 reply.I에 대한 Bhavesh 덕분에이을 다할 것 등을 변경 DTO 이상이 선호. –