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

我一直在尝试调试这个问题,不幸的是我需要另一双眼睛才能看到这一点。它已经让我感到困惑。似乎无法解决问题。请参阅下面的源和数据库 erd

http://img.mukewang.com/613db6020001f84702190381.jpg

上图显示了这种关系。一个用户可以有很多帖子,帖子只能属于 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


@Repository

public interface PostRepository extends JpaRepository<Post, Long> {


    List<Post> findByUser(Long uid);


}

PostServiceImpl.java


@Component

public 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"])



12345678_0001
浏览 162回答 1
1回答

慕森王

在您的情况下,您可以将 DSL 更改为:@Repositorypublic interface PostRepository extends JpaRepository<Post, Long> {&nbsp; &nbsp; List<Post> findByUser_uid(Long uid);}这样,您就可以收到用户 ID。或者:@Repositorypublic interface PostRepository extends JpaRepository<Post, Long> {&nbsp; &nbsp; @Query("SELECT p FROM Post p WHERE p.user.uid = ?1")&nbsp; &nbsp; List<Post> findByUser(Long uid);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java