相关疑难解决方法(0)

Hibernate持久化实体而不提取关联对象.只是通过id

我有两个实体之间的简单关联:

public class Car {

    ...

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "user_id")
    private User user;

    ...

}
Run Code Online (Sandbox Code Playgroud)

public class User {

    @Id
    @GeneratedValue
    @Column(name = "user_id")
    private long userId;

    ...

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
    private Set<Car> cars;

    ...

}
Run Code Online (Sandbox Code Playgroud)

然后我从客户端获得一些用户ID.例如,userId == 5;
为了节省汽车用户,我需要做下一步:

User user = ... .findOne(userId);  
Car car = new Car();
car.setUser(user);
... .save(car);
Run Code Online (Sandbox Code Playgroud)

我的问题是:
我可以在没有取用用户的情况下坚持记录汽车记录吗?

与我使用本机SQL查询一样:只需在Car表中插入userId,如string(long).

使用第二个lvl缓存会更快,但在我看来,我不需要做额外的动作.

我不想使用本机查询的主要原因是因为我的项目中有更多难关联,我需要多次.save(car).此外,我不想手动控制查询执行的顺序.

如果我使用session.createSQLQuery("insert into ..... values()"),Hibernate的批量插入工作会正常吗?



如我错了请纠正我.

提前致谢!

更新:

实际上映射类似于:

用户和汽车之间有@ManyToMany关联.但是交叉表也是一个名为Passanger的实体.所以映射是下一个:

public class User{
    @OneToMany(fetch = FetchType.LAZY, mappedBy …
Run Code Online (Sandbox Code Playgroud)

java hibernate

26
推荐指数
2
解决办法
1万
查看次数

如何在 Spring Boot 中使用 JPA 的 entityManager.getReference?

/sf/answers/898026881//sf/answers/2252893051/这样的答案以及许多其他人提到了一些enitityManager.getReference()方法,可以用来避免对数据库进行不必要的选择查询.

我在 spring boot 应用程序中遇到了类似的问题,当尝试将对象保存到数据库时,使用CRUDRepository. 我的班级看起来像,

class StudentSubject {
    String studentId;
    @ManyToOne
    private Subject subject;
    @ManyToOne
    private Student student;
}
Run Code Online (Sandbox Code Playgroud)

我必须不必要地find()调用从数据库中获取学生和主题对象,只是将它们传递StudentSubjectRepositorysave()他们。但是我已经有了主题和学生的主键。所以我想改用它们,entityManager看起来像我需要的。

但是我不知道这个 entityManager 来自哪里,或者在 Spring Boot 中是否有任何等效的东西。

java spring jpa spring-data-jpa spring-boot

3
推荐指数
2
解决办法
1438
查看次数

标签 统计

java ×2

hibernate ×1

jpa ×1

spring ×1

spring-boot ×1

spring-data-jpa ×1