有人可以帮我处理这段代码吗,我被这个错误困住了,我不知道错误的原因是什么。 我正在尝试访问用户表中的列,但它给了我一个错误:
org.hibernate.query.SemanticException:无法解析“com.example.User”的属性“user”
这是我的实体
用户.java
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@CreationTimestamp
private Date createdAt;
@UpdateTimestamp
private Date updatedAt;
@Column(nullable = false)
private String firstName;
private String middleName;
@Column(nullable = false)
private String lastName;
@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JoinTable(name = "users_subjects",
joinColumns = { @JoinColumn(name = "user_id") },
inverseJoinColumns = { @JoinColumn(name = "subject_id") })
private Set<Subject> subjects = new HashSet<>();
}
主题.java
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@EqualsAndHashCode(exclude = "users")
public class Subject {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@CreationTimestamp
private Date createdAt;
@UpdateTimestamp
private Date updatedAt;
private String subjectCode;
private String description;
@ManyToMany(fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST, CascadeType.MERGE }, mappedBy = "subjects")
@JsonIgnore
private Set<User> users = new HashSet<>();
}
UsersSubject.java
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name="users_subjects")
public class UsersSubjects {
@EmbeddedId
private UsersSubjectsId id = new UsersSubjectsId();
@ManyToOne(optional = false, targetEntity = User.class)
@JoinColumn(name = "user_id", referencedColumnName="id", insertable = false, updatable = false)
@MapsId("userId")
private User user;
@ManyToOne(optional = false, targetEntity = Subject.class)
@JoinColumn(name = "subject_id", referencedColumnName="id", insertable = false, updatable = false)
@MapsId("subjectId")
private Subject subject;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Embeddable
public static class UsersSubjectsId implements Serializable {
private static final long serialVersionUID = 1L;
private Long userId;
private Long subjectId;
}
}
这是我的主题规范代码
public static Specification<Subject> byColumnNameAndValueSubject(String value) {
return new Specification<Subject>() {
@Override
public Predicate toPredicate(Root<Subject> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
Join<Subject, UsersSubjects> userSubjectJoin = root.join("users", JoinType.INNER);
Join<UsersSubjects, User> userJoin = userSubjectJoin.join("user", JoinType.INNER);
Predicate predicateForData = criteriaBuilder.or(
criteriaBuilder.like(root.get("subjectCode").as(String.class), "%" + value + "%"),
criteriaBuilder.like(userJoin.get("firstName"), "%" + value + "%"));
return criteriaBuilder.and(predicateForData);
}
};
}
我想从User表中获取一列或尝试访问但我不知道为什么会出错