我一直在尝试调试这个问题,不幸的是我需要另一双眼睛才能看到这一点。它已经让我感到困惑。似乎无法解决问题。请参阅下面的源和数据库 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
@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"])
慕森王
相关分类