hashmap в менеджере по персистентности

таким образом, я пытаюсь создать механизм приложения Google с помощью сервлетов, фильтры и т.д. У меня есть файл Java, который смотрит что-то как:

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>();
}

но когда я пытаюсь запустить свою программу, я получаю начало стопки исключения:

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)

Так, мой вопрос состоит в том, почему он жалуется это java.util. HashMap не является поддерживаемым типом свойства, и также что я мог сделать для работы вокруг этого.Спасибо! надеюсь, что кто-то скоро отвечает.

6
задан tangens 13 February 2010 в 18:46
поделиться

1 ответ

По определению (почти) любая операция с NULL приведет к NULL, так как NULL означает «неопределенный». Я интерпретирую ваш вопрос о том, что cHospital или cHospital1 или cHospital3 могут быть нулевыми, которые вы хотите проверить. Вопрос в том, что должно произойти? Вы хотите, чтобы просто поле заменено пустой ряд, а затем конкат или все?

Я предполагаю, что первый. Это может выглядеть следующим образом:

SELECT Concat(
    IFNULL(mp.cHospital, ''),
    ',',
    IFNULL(mp.cHospital1,''),
    ',',
    IFNULL(mp.cHospital2,'')) AS Hospital
FROM TBL

IFNULL возвращает первую часть, если только его NULL не возвращает вторую часть (пустая последовательность здесь).

http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_ifnull

-121--1883291-

Я считаю, что следует протестировать код так, как если бы аспект был закодирован вручную, т.е. протестировать всю функциональность метода, включая функциональные возможности, реализованные аспектом.

Вопрос теперь документирован в онлайн-документации PostSharp по адресу http://doc.postsharp.net/postsharp-3.0/Content.aspx/PostSharp-3.0.chm/html/2ad6cf92-08eb-4537-a434-d88a3e493721.htm

-121--1862562-

Для сериализации он не поддерживается. Можно просмотреть список поддерживаемых типов и рассмотреть альтернативные конструкции. Я могу что-то упустить, но можете ли вы просто сохранить наборы пользователей, которые поддерживают или выступают против этой идеи? Какова цель булева? Обратите внимание, что HashSet является поддерживаемым типом.

2
ответ дан 17 December 2019 в 00:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: