【发布时间】:2019-11-23 02:29:29
【问题描述】:
我正在尝试使用 Spring Boot 在 MongoDB 中创建数据库。我想创建两个集合,一个 DbConnections 集合和一个 Configuration 集合。我想要做的是 DbConnections 集合中的每个连接都有自己的配置,就像使用外键的 SQL 引用一样。我试图使用@DBRef 注释来做到这一点:
@Document(collection = "connections")
public class DbConnection {
@Transient
public static final String SEQUENCE_NAME = "connection_sequence";
@Id
private long id;
private String username;
private String password;
private String connectionUrl;
private long fkIdUsuario;
@DBRef(db = "configurations")
private List<Configuration> configurations;
public DbConnection() {
}
public DbConnection(String username, String password, String connectionUrl) {
this.username = username;
this.password = password;
this.connectionUrl = connectionUrl;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public List<Configuration> getConfigurations() {
return configurations;
}
public void setConfigurations(List<Configuration> configurations) {
this.configurations = configurations;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getConnectionUrl() {
return connectionUrl;
}
public void setConnectionUrl(String connectionUrl) {
this.connectionUrl = connectionUrl;
}
public long getFkIdUsuario() {
return fkIdUsuario;
}
public void setFkIdUsuario(long fkIdUsuario) {
this.fkIdUsuario = fkIdUsuario;
}
}
还有配置类:
@Document(collection = "configurations")
public class Configuration {
@Transient
public static final String SEQUENCE_NAME = "config_sequence";
@Id
private long id;
private int fkIdConnection;
private String name;
private String query;
private BasicDBObject values;
private BasicDBObject result;
public Configuration() {
}
public Configuration(long id, int fkIdConnection, String name, String query, BasicDBObject values, BasicDBObject result) {
this.id = id;
this.fkIdConnection = fkIdConnection;
this.name = name;
this.query = query;
this.values = values;
this.result = result;
}
public int getFkIdConnection() {
return fkIdConnection;
}
public void setFkIdConnection(int fkIdConnection) {
this.fkIdConnection = fkIdConnection;
}
public Map getValues(){
if(null != values){
return values.toMap();
}
return null;
}
public void setValues(){
this.values = new BasicDBObject(values);
}
public Map getResult(){
if(null != result){
return result.toMap();
}
return null;
}
public void setResult(){
this.result = new BasicDBObject(result);
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getQuery() {
return query;
}
public void setQuery(String query) {
this.query = query;
}
}
我将这样的数据保存在控制器中: 对于 DbConnectionsController:
@PostMapping(value = "/conexion")
public DbConnection addConnection(@RequestBody DbConnectionModel dbConnectionModel){
DbConnection dbConnection = new DbConnection(dbConnectionModel.getUsername(), dbConnectionModel.getPassword(), dbConnectionModel.getConnectionUrl());
dbConnection.setFkIdUsuario(getIdUsuario());
return dbConnectionRepository.save(dbConnection);
}
以及配置控制器的保存方法:
@PostMapping
public Configuration agregarConfiguracion(@RequestBody Configuration configuration){
configuration.setId(sequenceGeneratorService.generateSequence(Configuration.SEQUENCE_NAME));
return configurationRepository.save(configuration);
}
现在,当我保存 Connection 时,它在 mongo 对象中没有字段 configurations,当我创建新的 Configuration 时,它仍然没有在 DbConnection 中显示它。尝试使用 GET 请求获取 DbConnections 对象,但 DbConnections 的 configurations 字段显示为空。为什么会发生这种情况,我该如何解决?
【问题讨论】:
标签: java mongodb spring-boot nosql