Hi, I have problems setting my primary key ‘_id’ as UUID.
My DAO code:
package de.tudo.ls14.aqua.smarthome.dao;
import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
import com.mongodb.client.*;
import static com.mongodb.client.model.Filters.eq;
import com.mongodb.client.model.FindOneAndReplaceOptions;
import com.mongodb.client.model.ReturnDocument;
import de.tudo.ls14.aqua.smarthome.model.Device;
import de.tudo.ls14.aqua.smarthome.model.Household;
import de.tudo.ls14.aqua.smarthome.model.User;
import org.bson.Document;
import org.bson.UuidRepresentation;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.codecs.pojo.PojoCodecProvider;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
import static org.bson.codecs.configuration.CodecRegistries.fromRegistries;
@Repository("Mongodao")
public class MongoDao {
final MongoClient mongoClient;
final MongoDatabase mongoDatabase;
final MongoCollection<User> userCollection;
final MongoCollection<Household> householdCollection;
final MongoCollection<Device> deviceCollection;
public MongoDao() {
String password = System.getProperty("password");//Passwort aus den VM options
Logger.getLogger("org.mongodb.driver").setLevel(Level.ALL);
ConnectionString connectionString = new ConnectionString("someConnectionString");
CodecRegistry pojoCodecRegistry = fromProviders(PojoCodecProvider.builder().automatic(true).build());
CodecRegistry codecRegistry = fromRegistries(MongoClientSettings.getDefaultCodecRegistry(), pojoCodecRegistry);
MongoClientSettings clientSettings = MongoClientSettings.builder()
.uuidRepresentation(UuidRepresentation.STANDARD)
.applyConnectionString(connectionString)
.codecRegistry(codecRegistry)
.build();
mongoClient = MongoClients.create(clientSettings);
mongoDatabase = mongoClient.getDatabase("ProjektDB");
userCollection = mongoDatabase.getCollection("userCollection", User.class);
householdCollection = mongoDatabase.getCollection("householdCollection", Household.class);
deviceCollection = mongoDatabase.getCollection("deviceCollection", Device.class);
}
public User getUserById(UUID id) {
return userCollection.find(eq("id", id)).first();
}
public Household getHouseholdById(UUID id) {
return householdCollection.find(eq("id", id)).first();
}
public Device getDeviceById(UUID id) {
return deviceCollection.find(eq("id", id)).first();
}
public int addHousehold(Household household) {
householdCollection.insertOne(household);
return 1;
}
public int addUser(User user) {
userCollection.insertOne(user);
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> added:"+user.toString());
return 1;
}
public int addDevice(Device device) {
deviceCollection.insertOne(device);
return 1;
}
public User updateUserById(User user) {
Document filterByUserId = new Document("_id", user.get_id());
FindOneAndReplaceOptions returnDocAfterReplace = new FindOneAndReplaceOptions().returnDocument(ReturnDocument.AFTER);
return userCollection.findOneAndReplace(filterByUserId, user, returnDocAfterReplace);
}
//nur zum testen
public List<User> getAllUsers() {
MongoCursor<User> cursor = userCollection.find().iterator();
List<User> userList = new ArrayList<>();
try{
while(cursor.hasNext()){
userList.add(cursor.next());
}
} finally {
cursor.close();
}
return userList;
}
}
I do not alter my POJO.
My POJO:
package de.tudo.ls14.aqua.smarthome.model;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class User {
private String name;
private UUID _id;
private List<UUID> households;
private String email;
public User(){
name = null;
_id = null;
households=null;
email = null;
}
public User(UUID _id, String name, List<UUID> households, String email) {
this._id = _id;
this.name = name;
this.households = households;
this.email = email;
}
public String getName() {
return name;
}
public User setName(String name) {
this.name = name;
return this;
}
public UUID get_id() {
return _id;
}
public User set_id(UUID _id) {
this._id = _id;
return this;
}
public List<UUID> getHouseholds() {
return households;
}
public User setHouseholds(List<UUID> households) {
this.households = households;
return this;
}
public String getEmail() {
return email;
}
public User setEmail(String email) {
this.email = email;
return this;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", _id=" + _id +
", households=" + households +
", email='" + email + '\'' +
'}';
}
}
The _id field is UUID, but when i open atlas, it gives every user an Object_id.
How can i fix that?