我是springboot和java的初学者,在尝试将votetypeenum常量值作为整数存储在数据库中时遇到了以下问题。
在mysql db中,downvote和upvote的值分别存储为0和1,而不是-1和1。
我无法打印downvote和upvote的整型常量值。我尝试过使用system.out.println(votetype.upvote.ordinal()),但它仍然打印upvote,而不是它的整数值,即1
这是我的密码:
votetype.java文件
public enum VoteType {
DOWNVOTE(-1), UPVOTE(1);
private final int direction;
VoteType(int direction) {
this.direction= direction;
}
public Integer getDirection() {
return direction;
}
}
voteservice.java文件
@Service
@Transactional
@AllArgsConstructor
public class VoteService {
private final VoteRepository voteRepository;
private final PostRepository postRepository;
private final AuthService authService;
@Transactional
public void vote(VoteDto voteDto) {
Post post = postRepository.findById(voteDto.getPostId())
.orElseThrow(() -> new PostNotFoundException("Post Not Found with ID - " + voteDto.getPostId()));
Optional<Vote> voteByPostAndUser =
voteRepository.findTopByPostAndUserOrderByIdDesc(post,
authService.getCurrentUser());
if (voteByPostAndUser.isPresent() &&
voteByPostAndUser.get().getType()
.equals(voteDto.getVoteType())) {
throw new MyRedditException("You have already "
+ voteDto.getVoteType() + "'d for this post");
}
if (UPVOTE.equals(voteDto.getVoteType())) {
post.setVoteCount(post.getVoteCount() + 1);
} else {
post.setVoteCount(post.getVoteCount() - 1);
}
voteRepository.save(mapDtoToVote(voteDto, post));
postRepository.save(post);
}
private Vote mapDtoToVote(VoteDto voteDto, Post post) {
return Vote.builder()
.type(voteDto.getVoteType())
.post(post)
.user(authService.getCurrentUser())
.build();
}
}
votecontroller.java文件
@RestController
@RequestMapping("/api/votes/")
@AllArgsConstructor
public class VoteController {
private final VoteService voteService;
@PostMapping
public ResponseEntity<Void> save(@RequestBody VoteDto voteDto){
voteService.vote(voteDto);
return new ResponseEntity<>(HttpStatus.CREATED);
}
}
votedto.java文件
@AllArgsConstructor
@NoArgsConstructor
@Data
public class VoteDto {
private VoteType voteType;
private Long postId;
}
投票.java
@Entity
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Table(name = "vote")
public class Vote {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "type")
private VoteType type;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "post_id")
private Post post;
}
投票表的屏幕截图,其中类型分别存储为0和1,而不是-1和1(downvote和upvote)。
请让我知道,如果需要更多的细节来回答这个问题。谢谢。
暂无答案!
目前还没有任何答案,快来回答吧!