Воспроизведение шаблона дизайна 2.0 Morphia с помощью mongodb

Это мой первый раз, когда я использую MongoDb и morphia, и я довольно новичок в базах данных в целом. Мне интересно, как мне организовать свой код с помощью morphia. Я рассматривал возможность использования DAO, как указано в документации по morphia, но как они это делают, мне пришлось бы создать DAO для каждого объекта модели, который у меня есть. Мне понравилась методология игры, в основном дающая объектам модели возможность сохранять себя, но у меня есть только смутное представление о том, что здесь происходит под капотом, поэтому я не уверен, как добиться этого с помощью морфия, или если это вообще желательно сделать так. Код, который у меня есть до сих пор, выглядит так для скелета модели пользователя.

@Entity("user")
public class User extends BasicDAO<User, ObjectId>{
    @Id ObjectId id;

public String firstName;

public String lastName;

public String email;

@Indexed public String username;

public String password;

public User(Mongo mongo, Morphia morphia){
    super(mongo, morphia, "UserDAO");
}
public User(){
    this(DBFactory.getMongo(), DBFactory.getMorphia());
}

public void save(){
    ds.save(this);
}

public static User findByUsername(String uname){
    return DBFactory.getDatastore().find(User.class, "username =", uname).get();
}

public static boolean authenticate(String uname, String pword){
    User user = DBFactory.getDatastore().createQuery(User.class).filter("username", uname).filter("password", pword).get();
    if(user == null)
        return false;
    else
        return true;
}
}

В настоящее время он выдает StackOverflowException, и я не уверен, почему, но является ли это разумным паттерном, чтобы попытаться выполнить его?

Кроме того, DBFactory в основном существует только для поддержки одноэлементного соединения mongodb.


person wfbarksdale    schedule 01.05.2012    source источник
comment
он явно использует java и хочет организовать свой код, я не думаю, что пример scala поможет   -  person nightograph    schedule 20.07.2013


Ответы (2)


В Play 2.0 есть модуль для работы с MongoDb. Думаю, вам стоит попробовать https://github.com/vznet/play-mongo-jackson-mapper#readme

person Ahmed Aswani    schedule 03.05.2012

Я начал использовать Marphia с игровым фреймворком 2.x. На мой взгляд, он более сложный, чем jackson mapper. Я следовал этому примеру, чтобы установить плагин marphia: https://github.com/czihong/playMongoDemo

person Karthik Sankar    schedule 25.06.2012
comment
Не могли бы вы уточнить, чем преобразование данных Morphia является более сложным, чем у Джексона? - person StaxMan; 22.07.2012
comment
code.google.com/p/morphia Как вы можете видеть на главной странице marphia, аннотации лотов доступны для настройки. А также он обеспечивает тип безопасного дао. - person Karthik Sankar; 30.09.2012
comment
Верно, но Джексон также легко настраивается с помощью аннотаций (включая внешние аннотации). Поэтому, хотя я не сомневаюсь, что Morphia имеет множество собственных функций, я не вижу ничего, кроме простых аннотаций на домашней странице; и ничего особенно сложного. Так что мне было любопытно, что вы считаете сложным здесь, особенно. учитывая, что вы сравнили его с Джексоном. - person StaxMan; 30.09.2012
comment
@KarthikSankar, где в этом коде он инициализирует MorphiaObject? - person nightograph; 20.07.2013
comment
@nightograph MorphiaObject инициализируется на github.com/czihong/playMongoDemo/blob/ мастер/приложение/Global.java - person Pedro Casagrande; 14.08.2014