2009-10-13 16 views
7

Tôi cố gắng tìm hiểu cách thực thi tính duy nhất trong các trường khác với id duy nhất.Cách thực thi giá trị trường duy nhất trong java Google App Engine

Ví dụ:

@PersistenceCapable(identityType = IdentityType.APPLICATION) 
public class User implements IsSerializable { 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Long id; 

    @Persistent 
    private String name; 

    @Persistent 
    private String email; // <= I want this to be unique as well 
} 

Trong ví dụ trên, làm thế nào tôi có thể thực thi độc đáo của các giá trị email trên cơ sở dữ liệu?

Daniel

Trả lời

11

Hiện không có cách nào được xây dựng bằng kho dữ liệu công cụ ứng dụng. Xem ví dụ this datanculeus ticket. (Lưu ý rằng bản thân JDO có chú thích @unique.)

Một cách để 'giả' là tạo một loại/lớp khác có tên Email với chính email đó làm khóa và khóa của Người dùng làm tài sản. Kể từ khi email bây giờ là một chìa khóa, nó sẽ bị buộc phải là duy nhất. Chỉ cần đảm bảo các thực thể Email của bạn là các thực thể cấp cao nhất, không phải là con của Người dùng được liên kết của chúng. Bạn cũng sẽ phải chú ý đến việc sử dụng các giao dịch của mình để đảm bảo rằng bạn không cho phép một phiếu trùng lặp thông qua các vết nứt nếu hai người dùng cố gắng sử dụng cùng một email tại cùng một thời điểm chính xác.

1

Tính năng này chưa được hỗ trợ. Nếu bạn quyết định viết một lớp DAO trong dự án của bạn (Không phải là một ý tưởng tồi), bạn có thể làm một truy vấn sẽ kiểm tra bất kỳ giới hạn nào bạn muốn bên trong MyObjectDAO.addMyObject (o) sẽ ném một MySuperDuplicateValueException.

6

Tôi đã viết một lớp quản lý tất cả các chức năng để thêm Trường duy nhất vào Thực thể của Máy ứng dụng. Xin vui lòng sử dụng nó.

Cắm lớp này trong dự án của bạn và chỉ cần thêm có được và cập nhật các phương pháp và cung cấp Tên tổ chức, tên Field và giá trị lĩnh vực độc đáo

Source code có sẵn ở đây:

http://code.google.com/p/appengine-uniquefields/

+0

này làm việc độc đáo cho nhu cầu của tôi. khá thông minh. – Patrick

+0

Tôi vui vì nó đã giúp :) –

+0

Cách tiếp cận tốt đẹp, tôi đã bắt đầu làm một cái gì đó tương tự như những gì Peter Recore mô tả ở trên, nhưng điều này sẽ giải quyết vấn đề của tôi chỉ là tốt, và với rất ít mã. –

Các vấn đề liên quan