0
I have Class Customer ,User , Customer has property manager of user class 

Class Customer { 

/** The manager. */ 
    @ManyToOne(optional = false, cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE}) 
    @JoinColumn(name = "MANAGER") 
    @JsonSerialize(using = EntitySerializer.class) 
    @JsonDeserialize(using = UserDeserializer.class) 
    private User manager; 
} 
------------------------------------- 
Class User { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO, generator = User.TABLE_NAME + "_SEQUENCE") 
    @SequenceGenerator(name = User.TABLE_NAME + "_SEQUENCE", sequenceName = User.TABLE_NAME + "_SEQ") 
    @Column(name = FIELD_ID, nullable = false) 
    @SuppressWarnings("PMD.ShortVariable") 
    private Integer id; 

@Override 
public Integer getId() { 
     return id; 
    } 

@Override 
    public void setId(final Integer newId) { 
     //System.out.println("setID"); 
     id = newId; 
    } 
} 

Nun, wenn ich KriterienFehler: - org.hibernate.PropertyAccessException. Konnte keinen Feldwert durch Reflexion Getter

endgültige Kriterien Kriterien zu schaffen versuchen = getSession() createCriteria (Customer.class) ; criteria.add (Restrictions.ilike ("Manager", "%" + search + "%"))

Es wirft Fehler: - org.hibernate.PropertyAccessException: konnte kein Feldwert durch Reflexion Getter von com erhalten .User.id

verursacht durch: java.lang.IllegalArgumentException: Kann nicht eingestellt java.lang.Integer Feld com.User.id zu java.lang.String

** Id Feld ist integer **

Antwort

0

Könnten Sie bitte Folgendes ändern:

final Criteria criteria = getSession().createCriteria(Customer.class); criteria.add(Restrictions.ilike("manager", "%"+searchTerm+"%")) 

durch:

final Criteria criteria = getSession().createCriteria(Customer.class); criteria.add(Restrictions.ilike("manager.name", "%"+searchTerm+"%")) 

LIKE-Klausel gilt nur für Textspalte.

+0

Aber nach Situation muss ich verwendet, um meinen Zustand WRT-ID-Filter ... d.h manger.id. Jede Möglichkeit, das zu archivieren –

-1

verwendet Sie diese Anmerkung

@Table(name="user_training") 
@Entity 
public class UserTraining { 

    @Id 
    @GeneratedValue 
    @Column(name="id") 
    private int id; 

    //Generate getter setter of id 
/* 
    @Column(name="user_id") 
    private int userId; 

    */ 


    @JsonIgnore 
    @ManyToOne(cascade = {CascadeType.ALL}) 
    @JoinColumn(name = "user_id") 
    private UserProfile userProfile; 


    public UserProfile getUserProfile() { 
     return userProfile; 
    } 


    public void setUserProfile(UserProfile userProfile) { 
     this.userProfile = userProfile; 
    } 

    @OneToOne 
    @JoinColumn(name = "training_id") 
    private Training training; 

    @Column(name="view_count") 
    private int viewCount; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 


    public Training getTraining() { 
     return training; 
    } 

    public void setTraining(Training training) { 
     this.training = training; 
    } 

    public int getViewCount() { 
     return viewCount; 
    } 

    public void setViewCount(int viewCount) { 
     this.viewCount = viewCount; 
    } 

} 
+0

Wie hilft es? – Sergii

+0

mein dieser Fehler entfernen Sie unter Anotation @JsonIgnore \t @ManyToOne (cascade = {CascadeType.ALL}) –

0

diesen Code auf Fehler entfernen

return this.sessionFactory.getCurrentSession() 
          .createCriteria(UserTraining.class) 
          .add(Restrictions.eq("userProfile.userId", userId)) 
          .list(); 
Verwandte Themen