Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实体管理器提交的性能不好-指数_Java_Jpa_Eclipselink_Entitymanager_Database Performance - Fatal编程技术网

Java 实体管理器提交的性能不好-指数

Java 实体管理器提交的性能不好-指数,java,jpa,eclipselink,entitymanager,database-performance,Java,Jpa,Eclipselink,Entitymanager,Database Performance,我在eclipse link 2.3和Derby db中使用entity manager JPA,我有一个包含10个实体的模型,每个实体需要存储1000条记录,这个过程大约需要70秒。我用10个实体对同一个模型进行了测试,但是100条记录提交的所有过程大约需要1.2秒,这非常好 瓶颈是entityManager.getTransaction().commit()我在持久化所有数据后只执行一次,提交将从all进程中获取95%以上的数据。 当我使用JVM监视器时,我深入到提交中,发现其中一个类负责几

我在eclipse link 2.3和Derby db中使用entity manager JPA,我有一个包含10个实体的模型,每个实体需要存储1000条记录,这个过程大约需要70秒。我用10个实体对同一个模型进行了测试,但是100条记录提交的所有过程大约需要1.2秒,这非常好

瓶颈是
entityManager.getTransaction().commit()我在持久化所有数据后只执行一次,提交将从all进程中获取95%以上的数据。
当我使用JVM监视器时,我深入到提交中,发现其中一个类负责几乎所有的提交时间,这个类是
org.eclipse.persistence.mappings.ManyToManyMapping

我的实体和模型没有任何多对多关系或使用任何多对多注释指数行为的原因是什么

我注意到,当我删除这两个实体时,时间节省了85%

这有什么问题

导航从具有基数1的个人导航到具有基数N的头衔奖励,即一个人可以拥有多个奖项

@javax.persistence.Entity
@javax.persistence.Table(name = "a3_Person")
public class Person {
    @javax.persistence.Id 
    @javax.persistence.Column(length = 20)    
    //// Id;
    private String person_id;
    public String getPerson_id() { return this.person_id; }
    public void setPerson_id(String person_id) { this.person_id = person_id; }

    @javax.persistence.Column(length = 30)    
    //// Name;
    private String person_name;
    public String getPerson_name() { return this.person_name; }
    public void setPerson_name(String person_name) { this.person_name = person_name; }

    //// Awards;
    private List<TitleAward> person_awards;
    public List<TitleAward> getPerson_awards() { return this.person_awards; }
    public void setPerson_awards(List<TitleAward> person_awards) { this.person_awards = person_awards; }

}




@javax.persistence.Entity
@javax.persistence.Table(name = "a3_TitleAward")
public class TitleAward {
    @javax.persistence.Id 
    @javax.persistence.Column(length = 20)    
    //// Id;
    private String titleaward_id;
    public String getTitleaward_id() { return this.titleaward_id; }
    public void setTitleaward_id(String titleaward_id) { this.titleaward_id = titleaward_id; }

    @javax.persistence.Column(length = 30)    
    //// Type;
    private String titleaward_type;
    public String getTitleaward_type() { return this.titleaward_type; }
    public void setTitleaward_type(String titleaward_type) { this.titleaward_type = titleaward_type; }

    @javax.persistence.Column(length = 30)    
    //// Category;
    private String Cateeheihbadc;
    public String getCateeheihbadc() { return this.Cateeheihbadc; }
    public void setCateeheihbadc(String Cateeheihbadc) { this.Cateeheihbadc = Cateeheihbadc; }

    @javax.persistence.Column()    
    //// Year;
    private String titleaward_year;
    public String getTitleaward_year() { return this.titleaward_year; }
    public void setTitleaward_year(String titleaward_year) { this.titleaward_year = titleaward_year; }

    @javax.persistence.Column()    
    //// Won;
    private Boolean titleaward_won;
    public Boolean getTitleaward_won() { return this.titleaward_won; }
    public void setTitleaward_won(Boolean titleaward_won) { this.titleaward_won = titleaward_won; }

    //// Person;
    private Person Pers_fhfgdcjef;
    public Person getPers_fhfgdcjef() { return this.Pers_fhfgdcjef; }
    public void setPers_fhfgdcjef(Person Pers_fhfgdcjef) { this.Pers_fhfgdcjef = Pers_fhfgdcjef; }

}
@javax.persistence.Entity
@javax.persistence.Table(name=“a3_Person”)
公共阶层人士{
@javax.persistence.Id
@javax.persistence.Column(长度=20)
////身份证;
私人字符串个人id;
公共字符串getPerson_id(){返回this.person_id;}
public void setPerson\u id(字符串person\u id){this.person\u id=person\u id;}
@javax.persistence.Column(长度=30)
////姓名;
私有字符串人名;
公共字符串getPerson_name(){返回this.person_name;}
public void setPerson\u name(字符串person\u name){this.person\u name=person\u name;}
////奖励;
私人名单个人奖;
公共列表getPerson_awards(){返回this.person_awards;}
public void setPerson\u awards(列出person\u awards){this.person\u awards=person\u awards;}
}
@javax.persistence.Entity
@javax.persistence.Table(name=“a3_TitleAward”)
公共类所有权{
@javax.persistence.Id
@javax.persistence.Column(长度=20)
////身份证;
私有字符串titleaward_id;
公共字符串getTitleWard_id(){返回this.titleWard_id;}
public void setTitleaward_id(字符串titleaward_id){this.titleaward_id=titleaward_id;}
@javax.persistence.Column(长度=30)
////类型;
私有字符串titleaward_类型;
公共字符串getTitleWard_type(){返回this.titleWard_type;}
public void setTitleaward_type(字符串titleaward_type){this.titleaward_type=titleaward_type;}
@javax.persistence.Column(长度=30)
////类别;
私有字符串cateeheibadc;
公共字符串getCateeheihbadc(){返回this.Cateeheihbadc;}
public void setCateeheihbadc(字符串Cateeheihbadc){this.Cateeheihbadc=Cateeheihbadc;}
@javax.persistence.Column()
////年份;
私有字符串标题每年;
公共字符串getTitleWard_year(){返回this.titleWard_year;}
public void setTitleaward_year(字符串titleaward_year){this.titleaward_year=titleaward_year;}
@javax.persistence.Column()
////赢得;
二等兵利沃德(吴元),;
公共布尔GetTitleWard_-won(){返回this.titleWard_-won;}
public void setTitleaward_-won(Boolean titleaward_-won){this.titleaward_-won=titleaward_-won;}
////人;
私人私人基金;
公共人物getPers_fhfgdcjef(){返回this.Pers_fhfgdcjef;}
公共无效设置人{this.Pers_fhfgdcjef=Pers_fhfgdcjef;}
}

这里概述了许多性能优化

ManyToManyMapping也用于使用@JoinTable的@OneToMany注释,您使用这个吗?一般来说,正确分析和理解配置文件可能很困难,因此您的配置文件可能无效

请包括您的代码、SQL日志示例和配置文件。您还可以启用EclipseLink PerformanceMonitor

看,,


如果100条记录只需要1.2秒,那么您可能会将流程分成100个批次,得到12秒而不是70秒。70年代听起来好像你有一些n^2问题。

谢谢詹姆斯!!!我已经添加了两个实体(我用这两个实体编辑了我的帖子),这导致了问题。你能看到哪里定义错了吗?因为我在同一个模型中有一个1到N的不同实体,这不会导致糟糕的性能,好吧,你有很多个人奖,因为这是任何实体集合的默认值。您应该使用@OneToMany(mappedBy=“Pers\u fhfgdcjef”)。但要知道性能问题是什么,您需要包括正在运行的代码和SQL日志示例,或者个人资料。@James-im在使用netfilix文件时也遇到了同样的问题。如果您不使用JPA列表为实体添加注释,那么这意味着什么呢?默认情况下,将其翻译为多对多?顺便问一下,您如何看到jean post中的此文件具有多对多?谢谢!