我们说我有这个数据模型:
public class User {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
public class Vehicle {
public virtual int Id { get; set; }
public virtual ICollection<User> TrackingUsers { get; set; }
public virtual Category Category { get; set; }
}
public class Category {
public virtual int Id { get; set; }
public virtual ICollection<Vehicle> Vehicles { get; set; }
}
和这个映射:
public VehicleMap()
{
Table("Vehicles");
Map(x => x.Id);
References(x => x.Category);
HasManyToMany(x => x.TrackingUsers)
.AsSet()
.Table("UsersToVehicles")
.LazyLoad()
.ParentKeyColumn("VehicleId")
.ChildKeyColumn("UserId");
}
public UserMap()
{
Table("Users");
Map(x => x.Id);
Map(x => x.Name);
}
public CategoryMap()
{
Table("Categories");
Map(x => x.Id);
HasMany(x => x.Vehicles);
}
每辆车只能放在一个类别中,但可以由多个用户跟踪,每个用户可以跟踪多辆车。
我想要实现的是允许用户设置跟踪&#39;所有类别车辆的状态。
这意味着对于类别中的每个车辆,我需要将User
实例添加到TrackingUsers
集合中。
显然,我不想查询所选类别中的所有车辆。是否有任何HQL或标准查询?
答案 0 :(得分:1)
您无法使用HQL或Criteria执行此操作,但您应该可以使用本机sql执行此操作。
session.CreateSQLQuery(@"INSERT INTO UsersToVehicles (VehicleId, UserId)
SELECT VehicleId, :userId
FROM Vehicles WHERE CategoryId = :categoryId")
.SetInt32("userId", userId)
.SetInt32("categoryId", categoryId)
.ExecuteUpdate();
但是,不要考虑在用户和类别之间添加TrackingUsers关系。这将允许自动跟踪新添加的车辆到一个类别。