[MONGODB] 우리는 봄 부트를 사용하여 MongoDB를위한 자동 생성 된 필드를 만들 수있는 방법
MONGODB우리는 봄 부트를 사용하여 MongoDB를위한 자동 생성 된 필드를 만들 수있는 방법
좀 code.I가에 대한 Autogenerated.Any 솔루션으로 BaseQuestion 클래스에 questionId 필드를 만들고 싶어 쓰기? 우리는이 필드가 자동으로 생성 여기 보여 어떻게 @GeneratedValue annotation.So을 사용할 수 없습니다 JPA jar.so 난을 사용하고 있지 않다. 코드는 다음과 같습니다.
pom.hml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>audit_project</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.11.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
BaseQuestion.java
package model;
import java.util.List;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "basequestion")
public class BaseQuestion {
@ID
private String id;
private int questionId;
private String responseType;
private boolean required;
private boolean active;
private String questionCode;
private QuestionText questionText;
private String category;
private List<Responses> responses;
public QuestionText getQuestionText() {
return questionText;
}
public void setQuestionText(QuestionText questionText) {
this.questionText = questionText;
}
public List<Responses> getResponses() {
return responses;
}
public void setResponses(List<Responses> responses) {
this.responses = responses;
}
public int getQuestionId() {
return questionId;
}
public void setQuestionId(int questionId) {
this.questionId = questionId;
}
public String getResponseType() {
return responseType;
}
public void setResponseType(String responseType) {
this.responseType = responseType;
}
public boolean getRequired() {
return required;
}
public void setRequired(boolean required) {
this.required = required;
}
public String getQuestionCode() {
return questionCode;
}
public void setQuestionCode(String questionCode) {
this.questionCode = questionCode;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
}
AuditProjectRepository.java
package repository;
import org.springframework.data.mongodb.repository.MongoRepository;
import model.BaseQuestion;
public interface AuditProjectRepository extends MongoRepository<BaseQuestion, String> {
public BaseQuestion findByQuestionId(int questionId);
public BaseQuestion findByQuestionCode(String questionCode);
public Long deleteByQuestionId(int questionid);
}
해결법
-
==============================
1.MongoDB의 모든 정교한 ObjectId가 생성 기능과 함께,하지만 종종 당신은 관계형 데이터베이스에서 배를 뛰어, 당신은 여전히 읽기 쉬운이 / 자동으로 새 레코드가 삽입 될 때마다 증가 숫자 식별자 필드를 전달합니다.
MongoDB의 모든 정교한 ObjectId가 생성 기능과 함께,하지만 종종 당신은 관계형 데이터베이스에서 배를 뛰어, 당신은 여전히 읽기 쉬운이 / 자동으로 새 레코드가 삽입 될 때마다 증가 숫자 식별자 필드를 전달합니다.
MongoDB의 튜토리얼에서 한 깔끔한 제안은 해당 ID로 '카운터 이름', 그리고 마지막으로 사용한 번호를 저장하는 '서열'필드 카운터 수집을 사용하는 것입니다.
봄 데이터 MongoDB의를 사용하여 개발하는 경우,이 깔끔한 트릭은 간단한 서비스로 쓸 수 있습니다. 그것은 기억 / 추측하기 쉬운, 그래서 여기에 카운터 이름으로 컬렉션 이름을 사용했다.
import static org.springframework.data.mongodb.core.FindAndModifyOptions.options; import static org.springframework.data.mongodb.core.query.Criteria.where; import static org.springframework.data.mongodb.core.query.Query.query; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.query.Update; import org.springframework.stereotype.Service; import com.model.CustomSequences; @Service public class NextSequenceService { @Autowired private MongoOperations mongo; public int getNextSequence(String seqName) { CustomSequences counter = mongo.findAndModify( query(where("_id").is(seqName)), new Update().inc("seq",1), options().returnNew(true).upsert(true), CustomSequences.class); return counter.getSeq(); } }
CustomSequences 컬렉션을 나타내는 단순한 클래스입니다. int 데이터 형식의 사용을 조심하십시오,이 2 ^ 31 항목의 최대 제한합니다.
import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "customSequences") public class CustomSequences { @Id private String id; private int seq; // getters and setters }
(봄 MongoDB를 저장소 지원의 도움으로) 새 항목을 삽입 할 때 당신이 그것을 저장하기 전에 그런 다음, 그냥이 같은 id 필드를 설정
BaseQuestion baseQuestion = new BaseQuestion(); baseQuestion.setQuestionId(nextSequenceService.getNextSequence("customSequences")); /* Rest all values */ baseQuestionRepository.save(baseQuestion);
이 방법이 마음에 들지 않으면 당신은 같은 위의 방법을 사용하여 자동화 된 값을 생성 MongoDBEvents를 사용 onBeforeConvert를 사용해야합니다.
findAndModify ()는 스레드 안전 원자 방법으로도 접근은 상기 스레드
from https://stackoverflow.com/questions/36448921/how-can-we-create-auto-generated-field-for-mongodb-using-spring-boot by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 새 문서에 삽입 그렇지 않으면이있는 경우 어떻게 업데이트? (0) | 2019.12.17 |
---|---|
[MONGODB] 자바 스크립트 문자열에 OBJECTID (MongoDB를를) 변환 (0) | 2019.12.17 |
[MONGODB] 어떻게하여 MongoDB의 범위 쿼리를 사용하여 페이지 매김을 할? (0) | 2019.12.17 |
[MONGODB] MongoDB의의 속성을 가진 많은 관계로 많은 대표 모범 모델 (0) | 2019.12.17 |
[MONGODB] MongoDB를 복합 키 (0) | 2019.12.17 |