我有两个实体之间的简单关联:
public class Car {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
...
}
和
public class User {
@Id
@GeneratedValue
@Column(name = "user_id")
private long userId;
...
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
private Set<Car> cars;
...
}
然后我从客户端获得一些用户ID。例如,userId == 5;
为了节省汽车用户,我需要做下一步:
User user = ... .findOne(userId);
Car car = new Car();
car.setUser(user);
... .save(car);
我的问题是:是否可以在不提取用户的情况下保留车辆记录?
与我使用本机SQL查询一样:只需在Car表中插入userId,如string(long)
使用第二个lvl缓存会更快,但在我看来,我不需要做额外的动作。
我不想使用本机查询的主要原因是因为我的项目中有很多难关联,我需要多次.save(car)。此外,我不想手动控制查询执行的顺序。
如果我使用session.createSQLQuery(&#34;插入..... values()&#34;)Hibernate的批处理插件是否正常工作?
如果我错了,请纠正我。
提前致谢!
的更新:
实际上,映射类似于:
User和Car之间存在@ManyToMany关联。但是交叉表也是一个名为Passanger的实体。所以映射是下一个:
public class User{
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user", targetEntity = Passenger.class)
private Set<Passenger> passengers;
}
跨实体
@IdClass(value = PassengerPK.class)
public class Passenger {
@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "car_id")
private Car car;
... other fields ...
}
汽车实体:
public class Car {
@OneToMany(fetch = FetchType.LAZY, mappedBy = "car", targetEntity = Passenger.class, cascade = CascadeType.ALL)
private Set<Passenger> passengers;
}
代码:
List<User> users = ... .findInUserIds(userIds); // find user records where userId is IN userIds - collection with user Ids
Car car = new Car(); //initialization of car's fields is omitted
if (users != null) {
car.setPassengers(new HashSet<>(users.size()));
users.forEach((user) -> car.getPassengers().add(new Passenger(user, car)));
}
... .save(car);
答案 0 :(得分:1)
如果某人使用的是Spring JPA,则可以使用方法在Spring JPA中进行相同的操作
答案 1 :(得分:0)
休眠用户可以实现此方法:
public <T extends Object> T getReferenceObject(Class<T> clazz, Serializable id) {
return getCurrentSession().get(clazz, id);
}
然后致电:
MyEntity myEntity = getRefererenceObject(MyEntity.class, 1);
您可以根据您的实体模型将id类型更改为Integer或Long。 如果所有实体都有一个基类,则T可以从BaseEntity继承。