java - 无法在此 ManagedType 上找到具有给定名称 [trackers] 的属性

标签 java spring hibernate lazy-initialization

我正在尝试在 Spring 上提供应用程序,并在实体之间提供延迟获取关系。

模型“用户”:

     Entity
 @Table(name = "users")
 @Component
 public class User {

   @Id
   @SequenceGenerator(name = "userseq", sequenceName = "userseq", allocationSize = 1)
   @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "userseq")
   private Integer id;

   // Some fields/getters/setters 

   @OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
   private List<Tracker> trakers;

 }

模型“追踪器”

 @Entity
 @Table(name = "trackers")
 @Component
 public class Tracker {

    @Id
    @SequenceGenerator(name = "tracker_seq", sequenceName = "tracker_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tracker_seq")
    private Integer id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id", insertable=false, updatable=false)
    @OnDelete(action = OnDeleteAction.CASCADE)
    private User user;

// Some fields/getters/setters 
}

使用@EntityGraph继承JPA存储库。通过此,我试图为选定的用户提供与以下相关的所有跟踪器:

@Repository
@Transactional(readOnly = true)
public interface CrudUserRepository extends JpaRepository<User, Integer> {

   @EntityGraph (attributePaths = {"trackers"}, type = EntityGraph.EntityGraphType.LOAD)
   @Query("SELECT u FROM User u WHERE u.id=?1")
   User getByIdWithTrackers(int id);
}

存储库类:

 @Repository
 public class AnketUserRepository implements UserRepository {

   @Autowired
   private CrudUserRepository crudRepository;

   @Override
   public User getByIdWithoutTrackers(int id) {
       return crudRepository.findById(id).orElse(null);
   }

   @Override
   public User getByIdWithTrackers(int id){
       return crudRepository.getByIdWithTrackers(id);
    }

}

和 Controller :

@RestController ("userRestController")
@RequestMapping(value = UserRestController.USER_URL, produces = 
MediaType.APPLICATION_JSON_VALUE)
public class UserRestController extends AbstractUserController {

    public static final String USER_URL = "/customers";

    @GetMapping("/{id}")
    public User getByIdWithoutTrackers(@PathVariable int id) {
        return super.getByIdWithoutTrackers(id);
    }

    @GetMapping("/{id}/withTrackers")
    public User getByIdWithTrackers(@PathVariable int id) {
        return super.getByIdWithTrackers(id);
    }
 }

查询“/customers/1”工作正常。它返回所有没有跟踪器的客户(相应地,Lazy-Fetch)。

但是“/customers/1/withTrackers”返回以下异常:

  lang.IllegalArgumentException: Unable to locate Attribute  with the the given name [trackers] on this ManagedType [ru.spb.model.User]"}

最佳答案

哦,这是一个愚蠢的错误。在用户中我写了“trakers”。但在 CrudUserRepository 的 attributePaths“traCkers”中。

关于java - 无法在此 ManagedType 上找到具有给定名称 [trackers] 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60763225/

相关文章:

java - Gradle没有下载Jax RS库

Java新手无法从其他class.java调用字符串

java - 如何在没有 JAXBElement 包装器的情况下对 JAXBElement 包装的响应进行 JSON 编码?

java - Spring REST - 从实体构建链接

java - 无法使用 hibernate 和 struts 在 jsp 中显示数据库中的图像

java - 哪个 Android/Java ORM 像 Hibernate 一样使用 “object caching”?

java - Spring 配置的 Hibernate 方言问题

java - 我们如何在 Spring 应用程序中加载和使用两个相同名称和类型的 bean

java - Hibernate 存储过程 - 未知支持 REF_CURSOR 参数

java - getResourceAsStream 返回空值