org.hibernate.query.SemanticException:无法解析 jpa 标准规范 spring boot 上的属性“table_name”

问题描述 投票:0回答:0

有人可以帮我处理这段代码吗,我被这个错误困住了,我不知道错误的原因是什么。 我正在尝试访问用户表中的列,但它给了我一个错误:

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表中获取一列或尝试访问但我不知道为什么会出错

spring-boot spring-data-jpa criteria specifications
© www.soinside.com 2019 - 2024. All rights reserved.