[英]Spring Boot: Storing Enum Integer Constant value to MySQL Database Table
I'm a beginner in Spring Boot and Java and having following issues while trying to store VoteType Enum Constant value in the database as Integer.我是 Spring Boot 和 Java 的初学者,在尝试将 VoteType 枚举常量值作为 Integer 存储在数据库中时遇到以下问题。
Here's my code:这是我的代码:
VoteType.java投票类型.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投票服务.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投票控制器.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投票给.java
@AllArgsConstructor
@NoArgsConstructor
@Data
public class VoteDto {
private VoteType voteType;
private Long postId;
}
Vote.java投票.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;
}
Screenshot of Vote Table where Type is getting stored as 0 and 1 instead of -1 and 1 for DOWNVOTE and UPVOTE respectively.投票表的屏幕截图,其中 Type 分别存储为 0 和 1,而不是 DOWNVOTE 和 UPVOTE 的 -1 和 1。
Please let me know if more detail is needed to answer this question.如果需要更多详细信息来回答这个问题,请告诉我。 Thanks.
谢谢。
Simply define type as Integer and translate to enum in get/set methods.只需将类型定义为 Integer 并在 get/set 方法中转换为枚举。
@Column(name = "type")
private Integer type;
public VoteType getType() {
return VoteType.fromValue(this.type);
}
public void setType(VoteType type) {
this.type = type.getValue();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.