CreditcardNumb.class
에 신용 카드 번호가 유효한지 확인하는 생성자가 있다고 가정합니다.Criteria API 호출 중에 (로컬로) AttributeConverter를 우회하거나 사용 불가능하게하는 방법이 있습니까?
나는 다음 데이터베이스에서 문자열로 신용 카드 번호를 변환하는 CreditcardNumbConverter.class
를 만들 :이 작품을 좋아
public class CreditcardnumbConverter
implements AttributeConverter<CreditcardNumb, String> {
public String convertToDatabaseColumn(CreditcardNumb cn) {
if (cn== null) return null;
return cn.toString();
}
public CreditcardNumb convertToEntityAttribute(String cn) {
if ((cn == null) || cn.trim().isEmpty()) return null;
return new CreditcardNumb(cn);
}
}
,하지만 지금은 사용할 Hibernate의 기준 API (새로운 또는 기존의 API를) "123"로 시작하는 신용 카드 번호를 검색 : 그러나
CreditcardNumb cn = new CreditcardNumb("123");
createCriteria(Wallet.class)
.add(Restrictions.ilike("creditcard", cn, MatchMode.START))
.list();
을 "123"유효한 신용 카드 번호가 아닙니다 때문에, 객체 인스턴스화가 실패합니다. 또한 ilike
메서드는 이 아닌 String
을 허용하기 때문에 컴파일되지 않습니다.
내 질문 : 나는 같은 것을 할 수 있도록
는, (로컬) 우회 또는 전환을 해제에 대한 방법 있습니까 :
createCriteria(Wallet.class)
.disable(CreditcardnumbConverter.class))
.add(Restrictions.ilike("creditcard", "123", MatchMode.START))
.list();
을 또는 어떤 다른 방법이 Criteria API (HQL을 사용하지 않음)를 사용하여 "123"으로 시작하는 신용 카드 번호를 검색하십시오.
@Entity
public class Wallet {
private CreditcardNumb creditcard;
@Column(name = ..., insertable = false, updatable = false)
private String creditcardStr;
...
}
중요한 점은 그 값이 (그렇지 않으면 최대 절전 모드 지속되지 않도록 삽입하거나 업데이트 할 수도있는 것으로이 열을 매핑하는 것입니다
없음 방법. 귀하의 유효성 확인에 대해 다시 생각해보십시오. 개인적으로 나는 생성자 내부에서 유효성 검사를하는 것을 선호하지 않습니다. 컴파일러는 무엇보다 먼저 생성자를 찾습니다. 그래서 당신은 오류가 발생했습니다. –
생성자에서 유효성 검사가 마음에 들지 않습니까? 미안하지만 불법 국가에 물건을 갖고 싶지 않습니다. 합법적 인 신용 카드 번호 만 갖고 싶지만 Criteria API를 사용하여 검색 할 수 있습니다. – MarcG