我有一个关于spring boot和hibernate的项目。从数据库中选择数据时一切正常,但在插入实体后我遇到了一个问题。插入后未提取实体关系。我尝试了JpaRepository保存并刷新,但没有成功。此外,我还尝试了findById,但没有成功。我如何解决这个问题?
我的实体;
@Entity
@Table(name = "Comment")
@Data
@ApiModel(value = "Comment Model")
public class Comment {
public static Comment createCommentFromCommentPostRequest(CommentPostRequest commentPostRequest){
Comment comment = new Comment();
comment.setPostId(commentPostRequest.getPostId());
comment.setUsersId(commentPostRequest.getUsersId());
comment.setText(commentPostRequest.getText());
return comment;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
@ApiModelProperty(value = "Comment model autogenerated Id value")
private Long id;
@Column(name = "usersId",nullable = false)
@ApiModelProperty(value = "User Id for describe who commented post")
private Long usersId;
@Column(name = "postId",nullable = false)
@ApiModelProperty(value = "Post Id for describe which post commented")
private Long postId;
@Column(name = "text",length = 500)
@ApiModelProperty(value = "define post content")
private String text;
@ManyToOne(fetch = FetchType.EAGER)
@Fetch(FetchMode.JOIN)
@JoinColumn(name = "usersId",insertable = false,updatable = false,nullable = false)
private Users users;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "postId",insertable = false,updatable = false,nullable = false)
@JsonIgnore
@OnDelete(action = OnDeleteAction.CASCADE)
private Post post;
}
我的存储库;
public interface CommentRepository extends PagingAndSortingRepository<Comment,Long> {
List<Comment> findAllByPostId(Long postId, Pageable pageable);
}
我的服务方式;
public Comment saveOneComment(CommentPostRequest commentPostRequest) {
//TODO: implement validation
Comment commentToSave = Comment.createCommentFromCommentPostRequest(commentPostRequest);
commentToSave= commentRepository.save(commentToSave);
//I tried JPA repository saveAndFlush
return commentRepository.findById(commentToSave.getId()).orElse(null);
}
我的控制器;使用saveOneCommentendpoint
@RestController
@RequestMapping("/api/comment")
@ApiOperation(value = "Comment api controller")
public class CommentController {
CommentService commentService;
public CommentController(CommentService commentService) {
this.commentService = commentService;
}
@GetMapping("/{pageNo}/{pageSize}")
public List<Comment> getAllComments(@PathVariable int pageNo,@PathVariable int pageSize){
return Streamable.of(commentService.getAllComments(pageNo,pageSize)).toList();
}
@GetMapping("/{commentId}")
public Comment findCommentById(@PathVariable Long commentId){
return commentService.findById(commentId);
}
@GetMapping("/postId={postId}/{pageNo}/{pageSize}")
public List<CommentResponse> getAllCommentsByPostId(@PathVariable Long postId,@PathVariable int pageNo,@PathVariable int pageSize){
return commentService.getAllCommentsByPostIdAsCommentResponse(postId,pageNo,pageSize);
}
@PostMapping
public Comment saveOneComment(@RequestBody CommentPostRequest commentPostRequest){
return commentService.saveOneComment(commentPostRequest);
}
@PutMapping("/{commentId}")
public Comment putOneComment(@PathVariable Long commentId,@RequestBody CommentPostRequest commentPostRequest){
return commentService.putOneCommentById(commentId,commentPostRequest);
}
@DeleteMapping("/{commentId}")
public void deleteOneComment(@PathVariable Long commentId){
commentService.deleteById(commentId);
}
}
Comment(id=32, usersId=2, postId=2, text=ddwad, user=null, post=null)
再次插入并查找后,用户和post为空。当我运行getAllCommentsByPostId方法时一切正常。
插入后,仅在控制台中插入查询。select语句没有任何查询。
insert
into
Comment
(postId, text, usersId)
values
(?, ?, ?)
您必须在提交事务后重新加载对象,我的意思是在事务外部维护关系
@PostMapping
public Comment saveOneComment(@RequestBody CommentPostRequest commentPostRequest){
Long id= commentService.saveOneComment(commentPostRequest);
return commentService.loadCommentById(id);
}
````
此代码崩溃: 原因:组织。postgresql。util。PSQLException:错误:关系“订阅”不存在 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect Springjpa。数据库平台=组织。冬眠地方话PostgreSQL10方言Spring。jpa。冬眠ddl auto=创建拖放
属性: 这是(Spring): 通过一个REST控制器和一个JSON,我想创建一个新的: 输出JSON: 我希望它们在保存操作之后被验证/返回。 要解决此问题,我必须在REST控制器中注入/声明,并调用方法(或者我必须调用方法以获得完整的持久化实体): 是否有一个自动的方法/注释,使用JPA或Spring或Hibernate,以便拥有“完整的”持久化实体? 我希望避免在每个REST或服务类中声明,
我试图使用spring JPA repository和entity graph加载实体的惰性属性,EntityGraph不是动态获取提供的关系,而是根据entity中为该属性定义的静态获取类型获取属性。 使用hibernate-5.2.17.Final,Spring-4.3.20.RELEASE,Spring数据JPA-1.11.22.RELEASE
我有2个实体(我删除了无用的字段): 而且 这似乎符合我的情况(也是我当前的实现),但它不起作用。 我得到以下错误消息: 来自MySQL: 临时解决方案是从存储库中检索所有相应的权限(按permissionName搜索)。那么保存效果很好。逻辑上是正确的,但我希望有一个更简单的程序...
保存“我的实体”时,通过关系工作的子实体不会保存到它们的表中。我不明白怎么回事。 员工: EmployeePhoneNumber: 如何设置这些字段,然后保存实体: 在完成该方法后,我没有一个错误,所有的工作都是正确的,只是表格没有填满--为什么?
在使用hibernate和jpa的spring mvc项目中,我有一个实体和一个实体。每个可以有许多,但每个只能有一个。如何为现有的保存新的? 我读过很多关于这个的帖子。如果我试图保存新的,就会出现无法保存分离实体的错误。但如果我试图保存现有的,则不会保存该角色。我读了这篇帖子,建议将hibernate注释移动到getter,但当我这样做时,我会收到一个引用未知属性的hibernate映射错误。这