我有一个Student实体,另一个实体@ManyToOneSchool,其中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)

08-18 05:36
查看更多