我一直在尝试调试这个问题,不幸的是我需要另一双眼睛才能看到这一点。它已经让我感到困惑。似乎无法解决问题。请参阅下面的源和数据库 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);
}
添加回答
举报
0/150
提交
取消