Как сопоставить вложенную коллекцию Map < Key, List < Values ​​> > > с аннотациями спящего режима JPA?

MongoDB не разрешает объединения, но вы можете использовать плагины для его обработки. Проверьте плагин mongo-join. Это лучшее, и я уже использовал его. Вы можете установить его с помощью npm прямо следующим образом npm install mongo-join. Вы можете проверить полную документацию с примерами .

(++) действительно полезный инструмент, когда нам нужно объединить (N) коллекции

(- ), мы можем применять условия только на верхнем уровне запроса

Пример

var Join = require('mongo-join').Join, mongodb = require('mongodb'), Db = mongodb.Db, Server = mongodb.Server;
db.open(function (err, Database) {
    Database.collection('Appoint', function (err, Appoints) {

        /* we can put conditions just on the top level */
        Appoints.find({_id_Doctor: id_doctor ,full_date :{ $gte: start_date },
            full_date :{ $lte: end_date }}, function (err, cursor) {
            var join = new Join(Database).on({
                field: '_id_Doctor', // <- field in Appoints document
                to: '_id',         // <- field in User doc. treated as ObjectID automatically.
                from: 'User'  // <- collection name for User doc
            }).on({
                field: '_id_Patient', // <- field in Appoints doc
                to: '_id',         // <- field in User doc. treated as ObjectID automatically.
                from: 'User'  // <- collection name for User doc
            })
            join.toArray(cursor, function (err, joinedDocs) {

                /* do what ever you want here */
                /* you can fetch the table and apply your own conditions */
                .....
                .....
                .....


                resp.status(200);
                resp.json({
                    "status": 200,
                    "message": "success",
                    "Appoints_Range": joinedDocs,


                });
                return resp;


            });

    });

14
задан Nathan Feger 2 June 2009 в 15:23
поделиться

3 ответа

Я не думаю, что с помощью hibernate (-core) можно отобразить любую коллекцию коллекций:

Коллекции могут содержать почти любые другой тип гибернации, включая все основные типы, нестандартные типы, компоненты, и, конечно, ссылки на другие сущностей.

(из официального документа )

Обратите внимание на почти и отсутствие типа коллекции.

Обходной путь: вам необходимо ввести новый тип «между» держателем коллекции и элементом. Этот тип можно сопоставить как объект или компонент, и он ссылается на исходное содержимое карты, в данном случае на список.

Что-то вроде:

@Entity
public class Holder extends DomainObject {
  @OneToMany
  private Map<Enum,InBetween> inBetweens;
}

@Entity
public class InBetween extends DomainObject {
  @OneToMany
  private List<Element> elements;
}

@Entity
public class Element extends DomainObject {
  private long valueId;
  private int otherData;
}

@Mappedsuperclass
public class DomainObject {
 // provides id
 // optimistic locking
 // create and update date
}

Остальная часть сопоставления зависит от вашей конкретной ситуации, но скорее является прямолинейно.

9
ответ дан 1 December 2019 в 04:53
поделиться

Вот блог о коллекции коллекций в спящем режиме http://blog.xebia.com/2007/10/05/mapping-multimaps-with-hibernate/

Надеюсь, это поможет. Это помогло мне.

С уважением, Антон

3
ответ дан 1 December 2019 в 04:53
поделиться

Обратите внимание, что указанная ссылка на документацию Hibernate кажется устаревшей, я обнаружил, что работает следующее: http://docs.jboss.org/hibernate/core/3.5/reference/en/html/collections .html

-1
ответ дан 1 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

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