java - JPA:如何在 save() 之前删除不必要的 SELECT?

标签 java hibernate spring-boot jpa spring-data-jpa

我有一个实体 Student这是 @ManyToOne与另一个实体 School ,哪里School预先存在于数据库中并且已修复。

实体User :

@Data
@Entity(name = "user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(nullable = false)
    private String username;

    @ManyToOne
    private School school;
}

实体School :

@Data
@Entity(name = "school")
public class School {
    @Id
    @Column(unique = true, nullable = false)
    private int id;

    @Column(nullable = false)
    private String name;

    private String shorten;

    @JsonProperty(value = "logo_url")
    private String logoUrl;

    private float longitude;

    private float latitude;

    @Column(nullable = false)
    private boolean opened;
}

添加用户时,我从 Postman 发布以下 json:

{
    "username": "abcd",
    "school_id": 2
}

那么,

School school = new School();
school.setId(2);    //"school_id" above

User user = new User();
user.setUsername("abcd");
user.setSchool(school);

userRepository.save(user);

因为我认为要添加一个新的user ,只有School id就足够了,没有其他School需要参数。但每次我运行时,它都会运行 select选择 School 的所有字段的语句通过id之前save()

我的问题是:如何去掉这个不必要的操作,以便在save()之前,没有必要select ? (我知道可以实现自定义sql语句,但是我感觉这会破坏JPA的面向对象)

最佳答案

在实体类上使用以下注释

@SelectBeforeUpdate(value=false)

关于java - JPA:如何在 save() 之前删除不必要的 SELECT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60927756/

相关文章:

java - 多对多查询 查找所有含有 XX 成分的 "recipes"

java - 输入对话框循环提前结束

java - Netbeans 应用程序中的 hibernate

java - 401 而不是 403 与 Spring Boot 2

Java Spring嵌套异常是java.lang.StackOverflowError

java - 电影票计算

java - 如何根据 map 字段的条件使用流过滤一组对象?

java - 了解何时访问数据库与缓存

java - 从单行 Hibernate 中选择单列

java - 你怎么能找出java应用程序是建立在Spring或Spring Boot或Spring MVC上的