나는 당신을 믿습니다 내가 찾고 있던 똑같은 것을 찾고 ... 찾았 어!
Java 코드를 생성하기 위해 사용자 정의 Hibernate 템플릿을 사용합니다. 나는 방금 그들의 사본을 가져다가 어지럽게 시작했다. 그것은 무서운 것보다 소리가납니다 - 저를 신뢰하십시오.
은 내가
PojoFields.ftl 파일에 다음 코드를 추가 : 모든 속성에 대한
// These static property values are being generated by the POJO templates (PojoFields.ftl)
<#foreach field in pojo.getAllPropertiesIterator()>
<#if pojo.getMetaAttribAsBool(field, "gen-property", true)>
<#assign name = pojo.getPropertyName(field) type = pojo.getJavaTypeName(field, jdk5)>
public static final String ${field.name}_propname = "${field.name}";
<#foreach column in field.getColumnIterator()>
<#if pojo.getJavaTypeName(field, jdk5) == "String">
public static final int ${field.name}_len = ${column.getLength()?c};
<#break>
</#if>
</#foreach>
</#if>
</#foreach>
, 그것은 속성 이름을 가진 공공 최종 정적 문자열을 생성합니다.
문자열 속성의 경우 필드 길이가있는 public final static int를 생성합니다.
public static final String postalCode_propname = "postalCode";
public static final int postalCode_len = 15;
는만큼 난 항상이 정적 변수 결코 하드 코딩 그 값을 사용할 때, 나는 데이터베이스 구조 변화와 관련된 런타임 오류를 피하기 것입니다.
예 : 기준
Criteria criteria = session.createCriteria(ClPost.class).add(
Restrictions.ne(ClPost.postalCode_propname, "90210"));
String hql = "select e." + ClPost.postalCode_propname
+ " from " + ClPost.class.getSimpleName() + " as e";
당신은 문자열로 필드 이름이 필요합니다. Restrictions.eq ("fieldname", foo) - 리팩터링과 동일한 문제가 있습니다. – davidsheldon