Java 在spring工具套件中使用jpa工具生成包含外键和复合主键的实体后运行服务器时出现异常
我有以下问题 我在mysql数据库中创建了四个表Java 在spring工具套件中使用jpa工具生成包含外键和复合主键的实体后运行服务器时出现异常,java,mysql,spring,jpa,spring-boot,Java,Mysql,Spring,Jpa,Spring Boot,我有以下问题 我在mysql数据库中创建了四个表 CREATE TABLE `MIPO`.`DBS_REST` ( `DB_ID` INT NOT NULL AUTO_INCREMENT, `DB_NAME` VARCHAR(100) NOT NULL, `DB_DESC` VARCHAR(45) NULL, `DB_THRSHLD_SPPLMNT` VARCHAR(45) NULL, `DB_THRSHLD_RMV` VARCHAR(45) NULL, `DB_
CREATE TABLE `MIPO`.`DBS_REST` (
`DB_ID` INT NOT NULL AUTO_INCREMENT,
`DB_NAME` VARCHAR(100) NOT NULL,
`DB_DESC` VARCHAR(45) NULL,
`DB_THRSHLD_SPPLMNT` VARCHAR(45) NULL,
`DB_THRSHLD_RMV` VARCHAR(45) NULL,
`DB_MAX_USR_SEQNCS` VARCHAR(45) NULL,
`DB_VALIDATN_EXPRSNS` VARCHAR(45) NULL,
`DB_BG_SUPP_SRCHS` VARCHAR(45) NULL,
`DB_PRUNE_CNT` VARCHAR(45) NULL,
PRIMARY KEY (`DB_ID`));
CREATE TABLE `MIPO`.`REGIONS_REST` (
`REG_ID` INT NOT NULL AUTO_INCREMENT,
`REG_NAME` VARCHAR(45) NOT NULL,
`REG_START_SEQ` VARCHAR(45) NOT NULL,
`REG_END_SEQ` VARCHAR(45) NOT NULL,
`REG_ACTIVE` ENUM('Y', 'N') NULL DEFAULT 'Y',
`REG_WILDCARD` VARCHAR(45) NOT NULL,
`REG_WILDCARD_SRCHLMT` INT NOT NULL,
`REG_WILDCARD_INSRTLMT` INT NOT NULL,
`REG_RUNLMT` INT NOT NULL,
`REG_SYMBOL` VARCHAR(45) NULL,
PRIMARY KEY (`REG_ID`),
UNIQUE INDEX `REGION_NAME_UNIQUE` (`REG_NAME` ASC));
CREATE TABLE SEQUENCES_REST (
SEQ_ID INT(11) NOT NULL AUTO_INCREMENT,
DB_ID INT(11) NOT NULL,
SEQ_ACTIVE enum('Y','N'),
SEQ_DATA longtext NOT NULL,
I3BIO INT(11),
REG_ID INT(10),
PRIMARY KEY (SEQ_ID),
FOREIGN KEY (DB_ID) REFERENCES DBS_REST(DB_ID),
FOREIGN KEY (REG_ID) REFERENCES REGIONS_REST(REG_ID)
);
CREATE TABLE SEQUENCES_NAMES_REST(
SEQ_ID INT(11) NOT NULL,
SEQ_NAME VARCHAR(100) NOT NULL,
PRIMARY KEY(SEQ_ID,SEQ_NAME),
FOREIGN KEY (SEQ_ID) REFERENCES SEQUENCES_REST(SEQ_ID)
);
在创建它们之后,我从spring工具套件中的jpa工具生成了实体。
注意,在上面的表中,当序列名称和序列名称被链接时,我遇到了问题。我能够在DB中创建表。但在生成实体后和运行tomcat服务器时出现异常。下面是我的实体代码
DBS_休息
package edu.unomaha.ist.bioinformatics.entities;
import java.io.Serializable;
import javax.persistence.*;
import java.util.List;
/**
* The persistent class for the DBS_REST database table.
*
*/
@Entity
@Table(name="DBS_REST")
@NamedQuery(name="DbsRest.findAll", query="SELECT d FROM DbsRest d")
public class DbsRest implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="DB_ID")
private int dbId;
@Column(name="DB_BG_SUPP_SRCHS")
private String dbBgSuppSrchs;
@Column(name="DB_DESC")
private String dbDesc;
@Column(name="DB_MAX_USR_SEQNCS")
private String dbMaxUsrSeqncs;
@Column(name="DB_NAME")
private String dbName;
@Column(name="DB_PRUNE_CNT")
private String dbPruneCnt;
@Column(name="DB_THRSHLD_RMV")
private String dbThrshldRmv;
@Column(name="DB_THRSHLD_SPPLMNT")
private String dbThrshldSpplmnt;
@Column(name="DB_VALIDATN_EXPRSNS")
private String dbValidatnExprsns;
//bi-directional many-to-one association to SequencesRest
@OneToMany(mappedBy="dbsRest")
private List<SequencesRest> sequencesRests;
public DbsRest() {
}
public int getDbId() {
return this.dbId;
}
public void setDbId(int dbId) {
this.dbId = dbId;
}
public String getDbBgSuppSrchs() {
return this.dbBgSuppSrchs;
}
public void setDbBgSuppSrchs(String dbBgSuppSrchs) {
this.dbBgSuppSrchs = dbBgSuppSrchs;
}
public String getDbDesc() {
return this.dbDesc;
}
public void setDbDesc(String dbDesc) {
this.dbDesc = dbDesc;
}
public String getDbMaxUsrSeqncs() {
return this.dbMaxUsrSeqncs;
}
public void setDbMaxUsrSeqncs(String dbMaxUsrSeqncs) {
this.dbMaxUsrSeqncs = dbMaxUsrSeqncs;
}
public String getDbName() {
return this.dbName;
}
public void setDbName(String dbName) {
this.dbName = dbName;
}
public String getDbPruneCnt() {
return this.dbPruneCnt;
}
public void setDbPruneCnt(String dbPruneCnt) {
this.dbPruneCnt = dbPruneCnt;
}
public String getDbThrshldRmv() {
return this.dbThrshldRmv;
}
public void setDbThrshldRmv(String dbThrshldRmv) {
this.dbThrshldRmv = dbThrshldRmv;
}
public String getDbThrshldSpplmnt() {
return this.dbThrshldSpplmnt;
}
public void setDbThrshldSpplmnt(String dbThrshldSpplmnt) {
this.dbThrshldSpplmnt = dbThrshldSpplmnt;
}
public String getDbValidatnExprsns() {
return this.dbValidatnExprsns;
}
public void setDbValidatnExprsns(String dbValidatnExprsns) {
this.dbValidatnExprsns = dbValidatnExprsns;
}
public List<SequencesRest> getSequencesRests() {
return this.sequencesRests;
}
public void setSequencesRests(List<SequencesRest> sequencesRests) {
this.sequencesRests = sequencesRests;
}
public SequencesRest addSequencesRest(SequencesRest sequencesRest) {
getSequencesRests().add(sequencesRest);
sequencesRest.setDbsRest(this);
return sequencesRest;
}
public SequencesRest removeSequencesRest(SequencesRest sequencesRest) {
getSequencesRests().remove(sequencesRest);
sequencesRest.setDbsRest(null);
return sequencesRest;
}
}
序列SNAMESRESTPK
package edu.unomaha.ist.bioinformatics.entities;
import java.io.Serializable;
import javax.persistence.*;
/**
* The primary key class for the SEQUENCES_NAMES_REST database table.
*
*/
@Embeddable
public class SequencesNamesRestPK implements Serializable {
//default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;
@Column(name="SEQ_ID", insertable=false, updatable=false)
private int seqId;
@Column(name="SEQ_NAME")
private String seqName;
public SequencesNamesRestPK() {
}
public int getSeqId() {
return this.seqId;
}
public void setSeqId(int seqId) {
this.seqId = seqId;
}
public String getSeqName() {
return this.seqName;
}
public void setSeqName(String seqName) {
this.seqName = seqName;
}
public boolean equals(Object other) {
if (this == other) {
return true;
}
if (!(other instanceof SequencesNamesRestPK)) {
return false;
}
SequencesNamesRestPK castOther = (SequencesNamesRestPK)other;
return
(this.seqId == castOther.seqId)
&& this.seqName.equals(castOther.seqName);
}
public int hashCode() {
final int prime = 31;
int hash = 17;
hash = hash * prime + this.seqId;
hash = hash * prime + this.seqName.hashCode();
return hash;
}
}
休息时间
package edu.unomaha.ist.bioinformatics.entities;
import java.io.Serializable;
import javax.persistence.*;
/**
* The persistent class for the SEQUENCES_REST database table.
*
*/
@Entity
@Table(name="SEQUENCES_REST")
@NamedQuery(name="SequencesRest.findAll", query="SELECT s FROM SequencesRest s")
public class SequencesRest implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="SEQ_ID")
private int seqId;
@Column(name="I3BIO")
private int i3bio;
@Column(name="SEQ_ACTIVE")
private String seqActive;
@Column(name="SEQ_DATA")
private Object seqData;
//bi-directional many-to-one association to DbsRest
@ManyToOne
@JoinColumn(name="DB_ID")
private DbsRest dbsRest;
//bi-directional many-to-one association to RegionsRest
@ManyToOne
@JoinColumn(name="REG_ID")
private RegionsRest regionsRest;
public SequencesRest() {
}
public int getSeqId() {
return this.seqId;
}
public void setSeqId(int seqId) {
this.seqId = seqId;
}
public int getI3bio() {
return this.i3bio;
}
public void setI3bio(int i3bio) {
this.i3bio = i3bio;
}
public String getSeqActive() {
return this.seqActive;
}
public void setSeqActive(String seqActive) {
this.seqActive = seqActive;
}
public Object getSeqData() {
return this.seqData;
}
public void setSeqData(Object seqData) {
this.seqData = seqData;
}
public DbsRest getDbsRest() {
return this.dbsRest;
}
public void setDbsRest(DbsRest dbsRest) {
this.dbsRest = dbsRest;
}
public RegionsRest getRegionsRest() {
return this.regionsRest;
}
public void setRegionsRest(RegionsRest regionsRest) {
this.regionsRest = regionsRest;
}
}
以下是启动服务器时出现的异常
2017-01-24 18:43:48.115 INFO 4558 --- [ost-startStop-1] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
2017-01-24 18:43:48.129 INFO 4558 --- [ost-startStop-1] org.hibernate.Version : HHH000412: Hibernate Core {4.1.9.Final}
2017-01-24 18:43:48.132 INFO 4558 --- [ost-startStop-1] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
2017-01-24 18:43:48.135 INFO 4558 --- [ost-startStop-1] org.hibernate.cfg.Environment : HHH000021: Bytecode provider name : javassist
2017-01-24 18:43:48.178 INFO 4558 --- [ost-startStop-1] org.hibernate.ejb.Ejb3Configuration : HHH000204: Processing PersistenceUnitInfo [
name: default
...]
2017-01-24 18:43:48.730 WARN 4558 --- [ost-startStop-1] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build EntityManagerFactory
2017-01-24 18:43:48.740 INFO 4558 --- [ost-startStop-1] utoConfigurationReportLoggingInitializer :
Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2017-01-24 18:43:48.750 ERROR 4558 --- [ost-startStop-1] o.s.boot.SpringApplication : Application startup failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build EntityManagerFactory
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1583) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1076) ~[spring-context-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:851) ~[spring-context-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) ~[spring-context-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:761) ~[spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:371) ~[spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
at org.springframework.boot.web.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:151) [spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
at org.springframework.boot.web.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:131) [spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
at org.springframework.boot.web.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:86) [spring-boot-1.4.1.RELEASE.jar:1.4.1.RELEASE]
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169) [spring-web-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5303) [catalina.jar:8.0.37]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) [catalina.jar:8.0.37]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1407) [catalina.jar:8.0.37]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1397) [catalina.jar:8.0.37]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_111]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_111]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_111]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111]
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915) ~[hibernate-entitymanager-4.1.9.Final.jar:4.1.9.Final]
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890) ~[hibernate-entitymanager-4.1.9.Final.jar:4.1.9.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateEjbPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateEjbPersistenceProvider.java:51) ~[spring-orm-4.3.3.RELEASE.jar:4.3.3.RELEASE]
at
我在spring工具套件中完成这项工作,并使用jpa工具生成enities。在以下情况下,我不会出错
创建1)DBSREST、RegionRest、SequencesNameRest、SequencesNamePK
2) DBSREST,REGIONSREST,SEQUENCESREST
3) SEQUENCESNAMESREST,SEQUENCESNAMESPK
4) 序列列表
只有当我链接SequencesNameRest和SequencesNameRest时,我才会得到异常。请注意,在SequencesNameRest中,foreign是复合主键的一部分。当我缩小可能的范围时,这就是我发现错误的地方。请帮帮我,伙计们
PS:我必须限制异常内容。如果您需要更多,请告诉我您的桌子在哪里
CREATE TABLE SEQUENCES_REST (
SEQ_ID INT(11) NOT NULL AUTO_INCREMENT,
DB_ID INT(11) NOT NULL,
SEQ_ACTIVE enum('Y','N'),
SEQ_DATA longtext NOT NULL,
REG_ID INT(10),
PRIMARY KEY (SEQ_ID),
FOREIGN KEY (DB_ID) REFERENCES DBS_REST(DB_ID),
FOREIGN KEY (REG_ID) REFERENCES REGIONS_REST(REG_ID)
);
但是您的对象列是
@Column(name="SEQ_ID")
private int seqId;
//这是不存在的
@Column(name="I3BIO")
private int i3bio;
正如消息所暗示的那样
原因:org.hibernate.MappingException:属性映射错误
列数:
edu.unomaha.ist.生物信息学.实体.序列测试
我真的很抱歉。这不是问题所在。我把数据库表贴错了。我已经编辑了问题(创建语句)。请查收
@Column(name="SEQ_ID")
private int seqId;
@Column(name="I3BIO")
private int i3bio;