다음 엔터티 클래스가 있습니다 : 사용자 및 범주. 사용자는 여러 범주를 가질 수 있습니다. 특정 이메일과 카테고리를 가져온 사용자를 선택하려면 쿼리를 작성해야합니다.이 값은 업데이트 값이 지정된 것보다 큽니다.최대 절전 모드, OneToMany 연결 - 선택 문제
불행히도, 나는 (내 관점에서) 이상한 오류가 발생합니다.
String selectQuery = "from User as user left outer join user.categories as category with category.updated >= :after where user.email = :email";
User u = (User)sessionFactory.getCurrentSession().createQuery(selectQuery).
setString("email", email).
setCalendar("after", after).
setResultTransformer(RootEntityResultTransformer.INSTANCE).
uniqueResult();
return u;
나는 또한이 쿼리 시도했다 : :
java.lang.ClassCastException: Category cannot be cast to User
아무도 어떤 단서가 있습니까 :
String selectQuery = "from User as user left outer join user.categories as category where category.updated >= :after and user.email = :email";
내가 오류 메시지를 여기에 쿼리입니까? 오류 메시지가 나에게 이상한 것 같습니다. 사용자가 아닌 범주에서 선택했기 때문입니다. P.S 물론 사용자가 범주를 전혀 갖고 있지 않으면 쿼리가 작동해야합니다.
다음은 엔티티 :
@Entity
@Table(name = "USER", uniqueConstraints = {
@UniqueConstraint(columnNames = {"EMAIL"})
})
public class User extends AbstractTimestampEntity implements Serializable {
public User() {
}
private Integer id;
private String email;
private Set<Category> categories = null;
@Id
@Column(name = "ID")
@GeneratedValue
public Integer getId() {
return id;
}
@NotEmpty
@Email
@Column(name = "EMAIL")
public String getEmail() {
return email;
}
@Cascade({ org.hibernate.annotations.CascadeType.PERSIST })
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
public Set<Category> getCategories() {
return categories;
}
public void setId(Integer id) {
this.id = id;
}
public void setEmail(String email) {
this.email = email;
}
public void setCategories(Set<Category> categories) {
this.categories = categories;
}
}
@Entity
@Table(name = "CATEGORY")
public class Category extends AbstractTimestampEntity implements Serializable {
private Integer id;
private User user;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", unique = true, nullable = false)
public Integer getId() {
return id;
}
@NotNull
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "USER_ID")
public User getUser() {
return user;
}
public void setId(Integer id) {
this.id = id;
}
public void setUser(User user) {
this.user = user;
}
}
@MappedSuperclass
public class AbstractTimestampEntity {
private Calendar created;
private Calendar updated;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "CREATED")
public Calendar getCreated() {
return created;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "UPDATED")
public Calendar getUpdated() {
return updated;
}
public void setCreated(Calendar created) {
this.created = created;
}
public void setUpdated(Calendar updated) {
this.updated = updated;
}
}
미리 감사드립니다. 도움을 주시면 감사하겠습니다.
개체 코드가 도움이 될 것 같습니다 ... –
'User' 및'Category' 클래스를 게시 할 수 있습니까? – Rohan
여기 있습니다. 내 질문에 관심을 가져 주셔서 감사합니다. – user3489820