Tôi đang cố gắng có một db nhất quán trong đó tên người dùng và email là duy nhất.MongoDB Morphia - Độc đáo
http://www.mongodb.org/display/DOCS/Indexes#Indexes-unique%3Atrue
http://code.google.com/p/morphia/wiki/EntityAnnotation
lớp người sử dụng tôi trông như thế này:
public class User {
@Indexed(unique = true)
@Required
@MinLength(4)
public String username;
@Indexed(unique = true)
@Required
@Email
public String email;
@Required
@MinLength(6)
public String password;
@Valid
public Profile profile;
public User() {
...
tôi đã sử dụng @Indexed (unique = true) chú thích nhưng nó không hoạt động. Vẫn còn các bản sao trong db của tôi.
Bất kỳ ý tưởng nào về cách khắc phục sự cố này?
Edit:
Tôi đọc về ensureIndexes nhưng điều này có vẻ như một cách tiếp cận sai, tôi không muốn tải lên dữ liệu trùng lặp, chỉ để thấy rằng nó thực sự là một trùng lặp.
Tôi muốn chặn ngay lập tức.
somthing như
try{
ds.save(user);
}
catch(UniqueException e){
...
}
hm, tôi không hiểu. Chắc chắn tôi có thể kiểm tra nó, nhưng nếu hai người dùng sẽ đăng ký với cùng một tên người dùng trong cùng một thời điểm thì sao? Tôi sẽ cần cái gì đó là nguyên tử. –
Cơ sở dữ liệu có xây dựng riêng của họ trong các hệ thống khóa (đọc, viết khóa vv), vì vậy tôi tin rằng nếu có những hạn chế duy nhất ở cấp cơ sở dữ liệu - lưu dữ liệu trùng lặp cùng một lúc sẽ không thể? –
Có lẽ tôi đã sai nhưng tôi nghĩ bạn có ý nghĩa như thế này. 'if (user.not_in_db) ds.save (người dùng);' Và nếu tôi không có ràng buộc ở cấp db thì sẽ có dữ liệu trùng lặp. –