我有两个实体
@Entity
public class Post{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
}
@Entity
public class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Post> posts= new ArrayList<>();
}
字符串
还有一个储存库
@Repository
public interface PostRepository extends JpaRepository<Post, Long> {
List<Post> findAllByUserId(Long id);
}
型
但是当我需要获取id Post.user.id时,我向类Post添加了一个方法,
public Long getUserId(){
return user== null ? null : user.getId();
}
型
然后方法findAllByUserId停止工作(IllegalArgumentException:Unable to locate Attribute with the given name UserId).有没有办法克服这个错误?或者有没有更方便的方法来获取相关实体的ID?
1.我尝试在getUserId方法上添加注解@Transient,但没有帮助
1.我知道我可以使用一个方法findAllByUser(Useruser),但是我更感兴趣的是通过id获取实体
1.我知道我可以使用@Query,但这太冗长了
1.我发现的唯一方法是重命名方法,例如调用它_getUserId,但也许还有其他方法?
1条答案
按热度按时间oxalkeyp1#
我假设您希望获取用户(给定用户ID)发布的帖子。
1.我知道我可以使用一个方法findAllByUser(Useruser),但是我更感兴趣的是通过id获取实体
我建议您从
Post
中删除方法getUserId()
。尽管
Post
中没有方法getUserId()
,List<Post> findAllByUserId(Long id);
仍然可以工作。您也可以将其重命名为
List<Post> findAllByUser_Id(Long id);
,以突出显示Id
来自实体User
。关于spring如何做的更多信息,最好参考spring data jpa的文档。