0

私は次のものを持っています:

@Entity
public class Person {

    @Id
    private long id;

    @Column
    private String firstName;

    // getters and setters
}

以下を機能させたい:

Criteria criteria = session.createCriteria(Person.class);

criteria.add(Restrictions.eq("firstName", "john"));

OR     

criteria.add(Restrictions.eq("FIRSTNAME", "john"));

OR 

criteria.add(Restrictions.eq("fiRstName", "john"));

基本的に、私はバックエンドでオブジェクトのフィルタリングを可能にする Web サービスを持っており、プロパティ名の大文字小文字を無視しようとしています。これを行う方法がわかりません。休止状態のドキュメントと休止状態のソースを検索して調べましたが、何も見つかりませんでした。Hibernate からの例外は

org.hibernate.QueryException: could not resolve property FIRSTNAME (or fiRstName) of com.abc.Person
at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:81)
    at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:75)
    at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1482)
    at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:62)
    at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1457)
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:483)
    at org.hibernate.loader.criteria.CriteriaQueryTranslator.findColumns(CriteriaQueryTranslator.java:498)
    at org.hibernate.criterion.SimpleExpression.toSqlString(SimpleExpression.java:68)
4

1 に答える 1

0
  • MetaModelエンティティのクラスを生成してみることができます。

    criteria.add(Restrictions.eq(Person_.firstName, "john"));

  • それ以外の場合は、一般に、リフレクションを使用してクラスで宣言されたフィールドを取得してみることができます。

    Field[] fields = Person.class.getDeclaredFields();      
    
     for(int i = 0; i < fields.length; i++){
    
        if(fields[i].getName().equalsIgnoreCase("FIRSTNAME")){
    
               criteria.add(Restrictions.eq(fields[i].getName(), "john"));      
    
               break;
        }
      }
    
于 2013-04-08T17:25:10.343 に答える