【发布时间】:2021-02-22 21:47:54
【问题描述】:
当状态设置为“过去”时,我想保存投票结果。 我有一个 H2 数据库,想添加一个只存储结果的 mongoDB。我该如何使用 Spring Boot 实现这一点?
到目前为止,我有一个投票程序,您可以在其中创建投票、编辑投票、投票等。
我已经为 mongodb、spring boot、spring mvc 和 H2 db 等添加了依赖项。
这是我的应用程序属性:
spring.datasource.url=jdbc:h2:file:./db;AUTO_RECONNECT=TRUE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=update
#Mongo Config
spring.main.allow-bean-definition-overriding=true
spring.data.mongodb.database=db-mongo
spring.data.mongodb.port=27017
spring.data.mongodb.host=localhost
我已经尝试过制作一个接口 mongoRepository:
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import project.dat250.entity.Poll;
import project.dat250.entity.User;
import java.util.List;
public interface ImongoRepository extends MongoRepository<Poll, Integer>, PagingAndSortingRepository<Poll, Integer> {
List<Poll> findByNameContainingIgnoreCase(@Param("name") String name);
List<Poll> findByUser(@Param("user") User user);
List<Poll> findByIsPublic(@Param("isPublic") boolean isPublic);
List<Poll> findByStatus(@Param("status") String status);
}
投票类:
@Data
@Entity
public class Poll {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Setter(AccessLevel.PROTECTED)
private int pollID;
private String name;
private String description;
private boolean isPublic;
private int voteGreen;
private int voteRed;
private String status;
private int timeLimit;
@ManyToOne
private User user;
@ManyToMany(cascade = CascadeType.PERSIST)
private List<User> usersVoted = new ArrayList<>();
public Poll() {
}
public Poll(String name, String description, boolean isPublic, int voteGreen, int voteRed, String status,
int timeLimit, User user) {
this.name = name;
this.description = description;
this.isPublic = isPublic;
this.voteGreen = voteGreen;
this.voteRed = voteRed;
this.status = status;
this.timeLimit = timeLimit;
this.user = user;
}
public void setUsersVoted(User userVoted) {
this.usersVoted.add(userVoted);
}
public void setUser(User user) {
this.user = user;
if (user != null)
user.setPolls(this);
}
public void setVoteRed(int red) {
this.voteRed += red;
}
public void setVoteGreen(int green) {
this.voteGreen += green;
}
public void setPublic(boolean isPublic) {
this.isPublic = isPublic;
}
}
【问题讨论】:
-
你能展示一下 Poll 类吗?\
-
添加投票类!
-
Poll 是 JPA 实体类。 MongoRepository 与
@Entity不兼容。应该是@Document。 -
您正在从 H2 数据库表中读取数据并将其写入 MongoDB 数据库集合。读写的过程是什么?
标签: java spring database mongodb spring-boot