为了账号安全,请及时绑定邮箱和手机立即绑定

@ManyToOne 单向参数值与预期类型不匹配

@ManyToOne 单向参数值与预期类型不匹配

12345678_0001 2021-09-12 16:10:22
我一直在尝试调试这个问题,不幸的是我需要另一双眼睛才能看到这一点。它已经让我感到困惑。似乎无法解决问题。请参阅下面的源和数据库 erd上图显示了这种关系。一个用户可以有很多帖子,帖子只能属于 1 个用户。下面是我的 JPA 代码帖子.java@Entity@Table(name = "posts")public class Post {    ... Some other fields ...    @ManyToOne(fetch = FetchType.LAZY)    @JoinColumn(name = "uid")    private User user;    public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }    ... Some getters/setters  ...    ... toString() ...}用户.java@Entity@Table(name = "users")public class User {    @Id    private Long uid;    private String username;    private String fname;    private String lname;    private String mail;    ... getters and setters ...    ... toString() ...}PostRepository.java@Repositorypublic interface PostRepository extends JpaRepository<Post, Long> {    List<Post> findByUser(Long uid);}PostServiceImpl.java@Componentpublic class PostServiceImpl implements PostService {    private static final Logger logger = LoggerFactory.getLogger(PostServiceImpl.class);    @Autowired    PostRepository repo;    public List<Post> getPostByUser(Long uid){        List<Post> posts = repo.findByUser(uid);        logger.info("returning {}",posts);        return posts;    }}所以我不明白出了什么问题,也许我已经调试了很长时间了,所以我需要帮助和另一组眼睛来看看我的代码有什么问题。注意事项1.) 我不需要用户的双向关系,因为当我添加/更新帖子时,我不需要更新用户信息。我只需要用于向前端(UI)显示目的的用户信息。这就是为什么我只需要单向关系,其中对于每个帖子,我需要附加用户信息。2.) 以上源代码仅用于 REST-API 端点,这意味着 FrontEnd 可以在单独的服务器上* **更新***@Brother 的回答,我按照说明更改了存储库界面@Query("SELECT p FROM Post p WHERE p.user.uid = ?1")List<Post> findByUser(Long uid);然而,发生了异常com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain: java.util.ArrayList[0]->com.web.santa.models.Post["user"]->com.web.santa.models.User$HibernateProxy$wLjffvP8["hibernateLazyInitializer"])
查看完整描述

1 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

在您的情况下,您可以将 DSL 更改为:


@Repository

public interface PostRepository extends JpaRepository<Post, Long> {


    List<Post> findByUser_uid(Long uid);


}

这样,您就可以收到用户 ID。或者:


@Repository

public interface PostRepository extends JpaRepository<Post, Long> {


    @Query("SELECT p FROM Post p WHERE p.user.uid = ?1")

    List<Post> findByUser(Long uid);


}


查看完整回答
反对 回复 2021-09-12
  • 1 回答
  • 0 关注
  • 161 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信