簡體   English   中英

為什么我的彈簧實體之一需要5秒鍾以上的時間進行查詢

[英]Why is just one of my spring entities taking over 5 seconds to query

我有一個Spring后端應用程序,該應用程序具有30多個實體,但是由於某種原因,該用戶對象永遠需要做任何事情。 僅檢索所有用戶(僅15位)就需要6秒鍾!! 最重要的是,

User user = new User();

超過100毫秒對我來說毫無意義。 我不知道是什么引起了這個問題。 以下是用戶模型和通過查詢所有用戶生成的一些sql。

@Entity
@Table(name = "tbluser")
@Immutable
public class User {

    private int userId;
    private String password;
    private String company;
    private String firstName;
    private String lastName;
    private String email;
    private String userName;
    private String phone;
    private String address1;
    private String address2;
    private String country;
    private String postal;
    private Set<UserRole> roles;
    private Integer isActive;
    private String userFolder;

    public User(){
        this("new", "PASSWORD", "new", "new", "",  1, "", "", "", "", "", "");
    }

    public User(String userName, String password, String firstName, String lastName){
        this(userName, password, firstName, lastName, "", 1, "", "", "", "", "", "");
    }

    public User(String userName, String password, String firstName, String lastName, Integer isActive){
        this(userName, password, firstName, lastName, "",  isActive, "", "", "", "", "", "");
    }

    public User(String userName, String password, String firstName, String lastName, String email, Integer isActive,
         String company, String phone, String address1, String address2, String country, String postal
         ){
        this.setUserName(userName);
        this.setEmail(email);
        this.setPassword(new BCryptPasswordEncoder().encode(password));
        this.setFirstName(firstName);
        this.setLastName(lastName);
        this.setIsActive(isActive);
        this.setCompany(company);
        this.setPhone(phone);
        this.setAddress1(address1);
        this.setAddress2(address2);
        this.setCountry(country);
        this.setPostal(postal);
    }

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    @Column(name = "username")
    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    @Column(name = "password", updatable = false)
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Column(name = "company")
    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    @Column(name = "firstname")
    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    @Column(name = "lastname")
    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    @Column(name = "email")
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Column(name = "phone")
    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Column(name = "address1")
    public String getAddress1() {
        return address1;
    }

    public void setAddress1(String address1) {
        this.address1 = address1;
    }

    @Column(name = "address2")
    public String getAddress2() {
        return address2;
    }

    public void setAddress2(String address2) {
        this.address2 = address2;
    }

    @Column(name = "country")
    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

    @Column(name = "postal")
    public String getPostal() {
        return postal;
    }

    public void setPostal(String postal) {
        this.postal = postal;
    }

    @Column(name = "user_folder")
    public String getUserFolder() {
        return userFolder;
    }

    public void setUserFolder(String userFolder) {
        this.userFolder = userFolder;
    }

    @Column(name = "isactive")
    public Integer getIsActive() {
        return isActive;
    }

    public void setIsActive(Integer isActive) {
        this.isActive = isActive;
    }


    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(name = "tbluserrolemap", joinColumns = @JoinColumn(name = "user_id"),
            inverseJoinColumns = @JoinColumn(name = "role_id"))
    public Set<UserRole> getRoles() {
        return roles;
    }

    public void setRoles(Set<UserRole> roles) {
        this.roles = roles;
    }



}

這是生成的sql以及用戶角色的一些聯接。 它應該熱切地加載,但是即使用戶數量也不多,也應該不會有太大的不同。

 Hibernate: select user0_.userId as userId1_63_, user0_.address1 as address2_63_, user0_.address2 as address3_63_, user0_.company as company4_63_, user0_.country as country5_63_, user0_.email as email6_63_, user0_.firstname as firstnam7_63_, user0_.isActive as isActive8_63_, user0_.lastname as lastname9_63_, user0_.password as passwor10_63_, user0_.phone as phone11_63_, user0_.postal as postal12_63_, user0_.user_folder as user_fo13_63_, user0_.username as usernam14_63_ from tbluser user0_ Hibernate: select roles0_.user_id as user_id1_64_0_, roles0_.role_id as role_id2_64_0_, userrole1_.role_id as role_id1_3_1_, userrole1_.name as name2_3_1_ from tbluserrolemap roles0_ inner join tbluserroles userrole1_ on roles0_.role_id=userrole1_.role_id where roles0_.user_id=? Hibernate: select roles0_.user_id as user_id1_64_0_, roles0_.role_id as role_id2_64_0_, userrole1_.role_id as role_id1_3_1_, userrole1_.name as name2_3_1_ from tbluserrolemap roles0_ inner join tbluserroles userrole1_ on roles0_.role_id=userrole1_.role_id where roles0_.user_id=? Hibernate: select roles0_.user_id as user_id1_64_0_, roles0_.role_id as role_id2_64_0_, userrole1_.role_id as role_id1_3_1_, userrole1_.name as name2_3_1_ from tbluserrolemap roles0_ inner join tbluserroles userrole1_ on roles0_.role_id=userrole1_.role_id where roles0_.user_id=? 

 CREATE TABLE `tbluser` ( `userId` int(11) NOT NULL AUTO_INCREMENT, `firstname` varchar(45) NOT NULL, `lastname` varchar(45) NOT NULL, `email` varchar(100) NOT NULL, `password` varchar(100) NOT NULL, `username` varchar(45) DEFAULT NULL, `phone` varchar(45) DEFAULT NULL, `address1` varchar(45) DEFAULT NULL, `address2` varchar(45) DEFAULT NULL, `country` varchar(45) DEFAULT NULL, `postal` varchar(45) DEFAULT NULL, `isactive` int(8) DEFAULT NULL, `company` varchar(45) DEFAULT NULL, `user_folder` varchar(45) DEFAULT NULL, PRIMARY KEY (`userId`) ) CREATE TABLE `tbluserrolemap` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) DEFAULT NULL, `role_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_roleid_idx` (`role_id`), KEY `fk_userid_idx` (`user_id`), CONSTRAINT `fk_roleid` FOREIGN KEY (`role_id`) REFERENCES `tbluserroles` (`role_id`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_userid` FOREIGN KEY (`user_id`) REFERENCES `tbluser` (`userId`) ON DELETE NO ACTION ON UPDATE NO ACTION ) CREATE TABLE `tbluserroles` ( `role_id` int(11) NOT NULL, `name` varchar(45) DEFAULT NULL, PRIMARY KEY (`role_id`) ) 

原來是我覆蓋了用戶實體的空構造函數。 顯然,Spring確實不喜歡這樣。 刪除了該內容,並在10毫秒內執行了調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM