Сопоставление свойства с индексным столбцом

Я пытаюсь сопоставить список со столбцом индекса. Это работает нормально, но я также хотел бы иметь возможность запрашивать столбец индекса из HQL. Когда я это делаю, HQL выдает исключение:

NHibernate.QueryException: не удалось разрешить свойство: Position of: component [Location, Time]

Чтобы иметь возможность запрашивать столбец WayPoint.Position из HQL, я создал свойство Position в классе WayPoint и хотел бы сопоставить это свойство со столбцом Position.

Я пробовал использовать:

wp.Map(x => x.Position).Column("Position");

Но это приводит к MappingException:

NHibernate.MappingException: повторяющийся столбец в сопоставлении для коллекции: столбец Route.WayPoints: Позиция

public class RouteMap : ClassMap
{
    private const string LocationKey = "LocationIndex";
    public RouteMap()
    {
        Not.LazyLoad();
        ReadOnly();
        Id(x => x.Id).GeneratedBy.Assigned();
        Version(x => x.Version);
        Map(x => x.Time);
        References(x => x.StartingPoint).UniqueKey(LocationKey);
        References(x => x.Destination).UniqueKey(LocationKey);
        HasMany(x => x.WayPoints).Component( wp =>
            {
                wp.Map(x => x.Time);
                //wp.Map(x => x.Position).Column("Position");
                wp.Component( wp2 => wp2.Location, gl =>
                    {
                        gl.Map(x => x.Latitude);
                        gl.Map(x => x.Longitude);
                    }
                );
            }

            ).AsList(index => index.Column("Position")).Cascade.All();
    }
}


create table `Route` (
    Id VARCHAR(40) not null,
   Version INTEGER not null,
   Time BIGINT,
   StartingPoint_id VARCHAR(40),
   Destination_id VARCHAR(40),
   primary key (Id),
  unique (StartingPoint_id, Destination_id)
)

create table WayPoints (
    Route_id VARCHAR(40) not null,
   Latitude DOUBLE,
   Longitude DOUBLE,
   Time BIGINT,
   Position INTEGER not null,
   primary key (Route_id, Position)
)

Можно ли отобразить свойство Положение? Или есть другой подход, чтобы HQL знал о поле индекса-позиции?


1
задан Peter Mortensen 1 February 2011 в 10:37
поделиться

2 ответа

Я не думаю, что вам вообще нужно сопоставлять свойство Position; если вам нужно запросить индекс коллекции, вы можете сделать это следующим образом:

select item, index(item) from Order order 
    join order.Items item
where index(item) < 5

Дополнительную информацию можно найти в HQL-документации.

2
ответ дан 2 September 2019 в 21:45
поделиться

Попробуйте добавить .ReadOnly() к вашему wp.Map(x => x.Position).Column("Position"); Это позволило мне сопоставить несколько свойств в тот же столбец раньше, по крайней мере, когда один из них был References().

0
ответ дан 2 September 2019 в 21:45
поделиться
Другие вопросы по тегам:

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