2016-07-21 1 views
0

Im obtenir cette erreur de mise en veille prolongée lorsque vous essayez de faire une recherche de critèreserreur mise en veille prolongée IllegalArgumentException

erreur org.hibernate.property.access.spi.GetterMethodImpl - HHH000122: IllegalArgumentException en classe: packagename.domain.User , getter de propriété: id

Pour cette recherche critères

@Override 
    public List<Story> findStoryByAuthor(Long userId) throws Exception { 
     Criteria criteria = currentSession().createCriteria(Story.class); 
     criteria.add(Restrictions.eq("author", userId)); 
     criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY); 
     List<?> stories = criteria.list(); 
     return (List<Story>) stories; 
    } 

Nous trouvons des histoires via l'utilisateur qui l'a créé alors voici les définitions de propriétés. Essayer de ne pas encombrer cela, donc si vous voulez voir plus de code, faites le moi savoir.

Story a un grand nombre d'une relation avec l'utilisateur

@ManyToOne(fetch = FetchType.LAZY, targetEntity = User.class) 
    @JoinColumn(name = "author_user_id", referencedColumnName = "id") 
    public User getAuthor() { 
     return author; 
    } 

Users ont aucune référence à l'histoire, mais sa propriété id est annotées correctement

@Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    public Long getId() { 
     return id; 
    } 

Enfin la structure de base de données

Histoires Tableau

id bigint NOT NULL DEFAULT nextval('stories_seq'::regclass), 
    parent_id bigint, 
    author_user_id bigint NOT NULL, 
    title character varying(100) NOT NULL, 
    dt_created timestamp without time zone NOT NULL, 
    dt_last_updated timestamp without time zone NOT NULL DEFAULT now_utc(), 
    thumbs_up bigint DEFAULT 0, 
    thumbs_down bigint DEFAULT 0, 
    CONSTRAINT pk_stories PRIMARY KEY (id), 
    CONSTRAINT fk_stories_author_user_id_users FOREIGN KEY (author_user_id) 
     REFERENCES public.users (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION 

Tableau des utilisateurs

id bigint NOT NULL DEFAULT nextval('users_seq'::regclass), 
    first_name character varying(255), 
    last_name character varying(255), 
    email character varying(255) NOT NULL, 
    user_name character varying(255), 
    password character varying(255), 
    phone character varying(255), 
    address character varying(500), 
    city character varying(255), 
    state character varying(255), 
    zip integer, 
    preferred_language character varying(255), 
    note character varying(32000), 
    active boolean DEFAULT true, 
    active_paid boolean DEFAULT false, 
    CONSTRAINT pk_user_id PRIMARY KEY (id), 
    CONSTRAINT users_unique_fields UNIQUE (email, user_name) 

Pour votre information toutes les fonctions de base (dao ajouter, mettre à jour et supprimer) travail (unité complète couverture de test). J'ai une autre recherche de critères, presque identique mais recherche dans le champ email et fonctionne bien. si cette erreur est quelque chose avec l'utilisateur de référence

+1

Essayez avec 'criteria.add (Restrictions.eq (" author.id ", userId));'. Si cela ne fonctionne pas, vous devrez peut-être utiliser 'alias'. – Apostolos

+0

merci qui a fonctionné. pouvez-vous s'il vous plaît faire une réponse, et le marquer comme tel –

Répondre

0

S'il vous plaît essayer avec

criteria.add(Restrictions.eq("author.id", userId)); 

author propriété est de classe User si vous avez besoin de faire référence à sa propriété id pour l'égalité.