2010-02-13 29 views
6

vì vậy tôi đang cố gắng để xây dựng một công cụ ứng dụng google sử dụng servlets, lọc vv Tôi có một file java mà trông giống như sau:hashmap trong quản lý bền bỉ

public class Idea implements Comparator<Idea> { 
@PrimaryKey 
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
private Key key; 

@Persistent 
private User author; 

@Persistent 
private String content; 

@Persistent 
private Date date; 

@Persistent 
private Map<User, Boolean> positiveVotes ; 

@Persistent 
private Map<User, Boolean> negativeVotes; 

public Idea(User author, String content, Date date) { 
    this.author = author; 
    this.content = content; 
    this.date = date; 
    this.positiveVotes = new HashMap<User, Boolean>(); 
    this.negativeVotes = new HashMap<User, Boolean>(); 
} 

nhưng khi tôi cố gắng để chạy chương trình của tôi, tôi có được ngăn xếp ngoại lệ bắt đầu bằng:

Feb 13, 2010 5:01:23 PM com.google.apphosting.utils.jetty.JettyLogger warn 
WARNING: /sign 
java.lang.IllegalArgumentException: positiveVotes: java.util.HashMap is not a supported property type. 
at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedSingleValue(DataTypeUtils.java:145) 
at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:127) 
at com.google.appengine.api.datastore.Entity.setProperty(Entity.java:280) 

Vì vậy, câu hỏi của tôi là tại sao nó không phải là loại thuộc tính được hỗ trợ và tôi cũng có thể làm gì để giải quyết nó. Cảm ơn! hy vọng ai đó sẽ trả lời sớm.

Trả lời

2

Đây không phải là loại được hỗ trợ để tuần tự hóa. Bạn có thể xem lại the list các loại được hỗ trợ và xem xét các thiết kế thay thế. Tôi có thể thiếu một cái gì đó, nhưng bạn có thể chỉ giữ cho những người dùng hỗ trợ hoặc phản đối ý tưởng đó không? Mục đích của boolean là gì? Lưu ý rằng HashSet là một loại được hỗ trợ.

+0

vì vậy tôi có thể làm gì nếu tôi muốn có một trường bản đồ trong lớp học của mình? – urfriend

+0

Bạn có thể hiển thị thêm mã hay giải thích mục đích của giá trị boolean không? –

+0

thực sự tôi nhận thấy hashmap thực sự là serializable http://java.sun.com/j2se/1.4.2/docs/api/java/util/HashMap.html. – urfriend

0

riêng bản đồ positiveVotes;

Giữ một bản đồ băm để xem liệu người dùng đã bình chọn hay không có thể trở nên cực kỳ kém hiệu quả nếu số lượng người dùng trở nên lớn.

tại sao không bạn giữ một lớp học như thế này:

class Votes { 
private Key key; 
private Key ideaId; 
private User voter; 
private Boolean positive; // true is positive, false is negative 
} 

và cho mỗi ý tưởng chỉ cần truy vấn bảng Votes để xem nếu người dùng đã bình chọn cho ý tưởng. nếu anh ta có dương tính hay tiêu cực.

Query query = pm.newQuery(Votes.class); 
query.setFilter("ideaId == :ideaIdParam && user == :userParam"); 
List<Votes> userVotes = query.execute(ideaId, user); 
if(userVotes != null && !userVotes.isEmpty()){ 
return userVotes.get(0).getPositive(); // this gives the users reaction 
} 
else { 
return null; // this means no reaction 
} 

bây giờ bạn có thể sử dụng để phản hồi người dùng cụ thể hoặc lặp lại danh sách và nhận phản hồi của người dùng bằng cách xóa người dùng khỏi truy vấn.

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