spring引导:将enum integer常量值存储到mysql数据库表

50few1ms  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(202)

我是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)。
请让我知道,如果需要更多的细节来回答这个问题。谢谢。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题