Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
Mysql 使用具有双向关系的CRUD存储库的save()方法时出现通信异常和StackOverflowerError_Mysql_Spring_Spring Boot_Spring Data Jpa - Fatal编程技术网

Mysql 使用具有双向关系的CRUD存储库的save()方法时出现通信异常和StackOverflowerError

Mysql 使用具有双向关系的CRUD存储库的save()方法时出现通信异常和StackOverflowerError,mysql,spring,spring-boot,spring-data-jpa,Mysql,Spring,Spring Boot,Spring Data Jpa,我使用spring数据jpa,hibernate和mysql服务器。我的模型有这样的关系:一个项目有很多工作,一个工作有很多技术要求,语言要求。当我尝试使用存储库的save()方法更新项目时(其中包含修改作业和需求)。它会导致通信异常: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from th

我使用spring数据jpa,hibernate和mysql服务器。我的模型有这样的关系:一个项目有很多工作,一个工作有很多技术要求,语言要求。当我尝试使用存储库的save()方法更新项目时(其中包含修改作业和需求)。它会导致通信异常:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 85 milliseconds ago.  The last packet sent successfully to the server was 77 milliseconds ago.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_201]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_201]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_201]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_201]
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:990) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3562) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3462) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3903) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2482) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:4796) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.zaxxer.hikari.pool.ProxyConnection.setAutoCommit(ProxyConnection.java:388) ~[HikariCP-3.2.0.jar:na]
    at com.zaxxer.hikari.pool.HikariProxyConnection.setAutoCommit(HikariProxyConnection.java) [HikariCP-3.2.0.jar:na]
    at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.resetConnection(AbstractLogicalConnectionImplementor.java:101) [hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.afterCompletion(LogicalConnectionManagedImpl.java:268) [hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.resource.jdbc.internal.AbstractLogicalConnectionImplementor.rollback(AbstractLogicalConnectionImplementor.java:125) [hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.rollback(JdbcResourceLocalTransactionCoordinatorImpl.java:294) [hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.engine.transaction.internal.TransactionImpl.rollback(TransactionImpl.java:139) [hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.springframework.orm.jpa.JpaTransactionManager.doRollback(JpaTransactionManager.java:559) [spring-orm-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:838) [spring-tx-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:812) [spring-tx-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(TransactionAspectSupport.java:551) [spring-tx-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:298) [spring-tx-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98) [spring-tx-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139) [spring-tx-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:135) [spring-data-jpa-2.1.5.RELEASE.jar:2.1.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93) [spring-aop-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:61) [spring-data-commons-2.1.5.RELEASE.jar:2.1.5.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) [spring-aop-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) [spring-aop-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at com.sun.proxy.$Proxy129.save(Unknown Source) [na:na]
    at fa.mksgroup.si.service.impl.MatchedTechSkillServiceImpl.add(MatchedTechSkillServiceImpl.java:53) [classes/:na]
    at fa.mksgroup.si.controller.ProjectController.addProject(ProjectController.java:256) [classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_201]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_201]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_201]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_201]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189) [spring-web-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) [spring-web-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) [spring-webmvc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) [spring-webmvc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800) [spring-webmvc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) [spring-webmvc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038) [spring-webmvc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942) [spring-webmvc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005) [spring-webmvc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:908) [spring-webmvc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) [tomcat-embed-core-9.0.16.jar:9.0.16]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882) [spring-webmvc-5.1.5.RELEASE.jar:5.1.5.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) [tomcat-embed-core-9.0.16.jar:9.0.16]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [tomcat-embed-core-9.0.16.jar:9.0.16]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.16.jar:9.0.16]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.16.jar:9.0.16]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.16.jar:9.0.16]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.16.jar:9.0.16]
    at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:97) [cas-client-core-3.5.1.jar:3.5.1]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.16.jar:9.0.16]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.16.jar:9.0.16]
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) [spring-security-web-5.1.4.RELEASE.jar:5.1.4.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.16.jar:9.0.16]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.16.jar:9.0.16]
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200) [spring-security-web-5.1.4.RELEASE.jar:5.1.4.RELEASE]
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3014) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3472) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    ... 128 common frames omitted

这个StackOverflower错误:

2019-04-22 18:35:51.321 ERROR 17907 --- [nio-9000-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.StackOverflowError] with root cause

java.lang.StackOverflowError: null
    at sun.security.provider.DigestBase.engineUpdate(DigestBase.java:121) ~[na:1.8.0_201]
    at java.security.MessageDigest$Delegate.engineUpdate(MessageDigest.java:584) ~[na:1.8.0_201]
    at java.security.MessageDigest.update(MessageDigest.java:325) ~[na:1.8.0_201]
    at com.sun.crypto.provider.HmacCore.engineUpdate(HmacCore.java:166) ~[sunjce_provider.jar:1.8.0_201]
    at javax.crypto.Mac.update(Mac.java:510) ~[na:1.8.0_191]
    at sun.security.ssl.MAC.compute(MAC.java:135) ~[na:1.8.0_201]
    at sun.security.ssl.OutputRecord.encrypt(OutputRecord.java:237) ~[na:1.8.0_201]
    at sun.security.ssl.SSLSocketImpl.writeRecordInternal(SSLSocketImpl.java:862) ~[na:1.8.0_201]
    at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:850) ~[na:1.8.0_201]
    at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:123) ~[na:1.8.0_201]
    at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) ~[na:1.8.0_201]
    at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) ~[na:1.8.0_201]
    at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3731) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2512) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1966) ~[mysql-connector-java-5.1.46.jar:5.1.46]
    at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) ~[HikariCP-3.2.0.jar:na]
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) ~[HikariCP-3.2.0.jar:na]
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:60) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.loader.Loader.getResultSet(Loader.java:2167) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1930) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1892) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.loader.Loader.doQuery(Loader.java:937) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:340) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:310) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.loader.Loader.loadEntity(Loader.java:2281) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:64) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:54) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4269) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:511) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:481) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:222) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:281) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:124) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:92) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1257) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:1140) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:682) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.type.EntityType.resolve(EntityType.java:464) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.type.ManyToOneType.resolve(ManyToOneType.java:239) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.type.EntityType.resolve(EntityType.java:457) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
    at org.hibernate.type.ComponentType.resolve(ComponentType.java:688) ~[hibernate-core-5.3.7.Final.jar:5.3.7.Final]
我曾经遇到过这个错误,我知道的唯一方法是使用many for并逐个保存。是否有其他方法来解决这个问题,因为需要太多行代码来替换唯一的save()方法

编辑: 这是我的实体:

@Entity(name = "project")
@Table(name = "project")
public class Project {

    private static final int MAX10 = 10;
    private static final int MAX50 = 50;
    private static final int MAX100 = 100;
    private static final int MAX300 = 300;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private Long id;

    @Size(max = MAX100)
    @Column(name = "name", nullable = false)
    private String name;

    @Size(max = MAX50)
    @Column(name = "company", nullable = false)
    private String company;

    @Column(name = "teamsize")
    private int teamsize;

    @Size(max = MAX10)
    @Column(name = "timestart", nullable = false)
    private String timestart;

    @Size(max = MAX10)
    @Column(name = "timeend", nullable = false)
    private String timeend;

    @Size(max = MAX300)
    @Column(name = "description")
    private String description;

    @Column(name = "techskills")
    private String techskills;

    @Size(max = MAX10)
    @Column(name = "status", nullable = false)
    private String status;

    @Column(name = "createBy", nullable = false)
    private Long createBy;

    @Size(max = MAX10)
    @Column(name = "createDate", nullable = false)
    private String createDate;

    @Column(name = "modifyBy")
    private Long modifyBy;

    @Size(max = MAX10)
    @Column(name = "modifyDate")
    private String modifyDate;

    @Size(max = MAX50)
    @Column(name = "lastLoad", nullable = false)
    private String lastLoad;

    @JsonManagedReference
    @OneToMany(targetEntity = Job.class, mappedBy = "project", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private Set<Job> jobs;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCompany() {
        return company;
    }

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

    public int getTeamsize() {
        return teamsize;
    }

    public void setTeamsize(int teamsize) {
        this.teamsize = teamsize;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getTechskills() {
        return techskills;
    }

    public void setTechskills(String techskills) {
        this.techskills = techskills;
    }

    public Long getCreateBy() {
        return createBy;
    }

    public void setCreateBy(Long createBy) {
        this.createBy = createBy;
    }

    public String getCreateDate() {
        return createDate;
    }

    public void setCreateDate(String createDate) {
        this.createDate = createDate;
    }

    public Long getModifyBy() {
        return modifyBy;
    }

    public void setModifyBy(Long modifyBy) {
        this.modifyBy = modifyBy;
    }

    public String getModifyDate() {
        return modifyDate;
    }

    public void setModifyDate(String modifyDate) {
        this.modifyDate = modifyDate;
    }

    public String getLastLoad() {
        return lastLoad;
    }

    public void setLastLoad(String lastLoad) {
        this.lastLoad = lastLoad;
    }

    public Set<Job> getJobs() {
        return jobs;
    }

    public void setJobs(Set<Job> jobs) {
        this.jobs = jobs;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getTimestart() {
        return timestart;
    }

    public void setTimestart(String timestart) {
        this.timestart = timestart;
    }

    public String getTimeend() {
        return timeend;
    }

    public void setTimeend(String timeend) {
        this.timeend = timeend;
    }

}

@Entity(name = "job")
@Table(name = "job")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id", scope = Job.class)
public class Job {
    private static final int MAX10 = 10;
    private static final int MAX50 = 50;
    private static final int MAX300 = 300;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private Long id;

    @Size(max = MAX300)
    @Column(name = "description", nullable = false)
    private String description;

    @Size(max = MAX300)
    @Column(name = "role", nullable = false)
    private String role;

    @Size(max = MAX10)
    @Column(name = "timestart", nullable = false)
    private String timestart;

    @Size(max = MAX10)
    @Column(name = "timeend", nullable = false)
    private String timeend;

    @Size(max = MAX10)
    @Column(name = "status", nullable = false)
    private String status;

    @Column(name = "createBy", nullable = false)
    private Long createBy;

    @Size(max = MAX10)
    @Column(name = "createDate", nullable = false)
    private String createDate;

    @Column(name = "modifyBy")
    private Long modifyBy;

    @Size(max = MAX10)
    @Column(name = "modifyDate")
    private String modifyDate;

    @Size(max = MAX50)
    @Column(name = "lastLoad", nullable = false)
    private String lastLoad;

    @JsonManagedReference
    @JsonIgnore
    @OneToMany(targetEntity = Candidate.class, mappedBy = "pk.job", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private Set<Candidate> candidates;

    @JsonBackReference
    @ManyToOne
    @JoinColumn(name = "projectid")
    private Project project;

    @JsonManagedReference
    @OneToMany(targetEntity = MatchedCertificate.class, mappedBy = "job", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private Set<MatchedCertificate> matchedCertificates;

    @JsonManagedReference
    @OneToMany(targetEntity = MatchedLanguage.class, mappedBy = "job", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private Set<MatchedLanguage> matchedLanguages ;

    @JsonManagedReference
    @OneToMany(targetEntity = MatchedTechSkill.class, mappedBy = "job", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private Set<MatchedTechSkill> matchedTechSkills;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    public String getTimestart() {
        return timestart;
    }

    public void setTimestart(String timestart) {
        this.timestart = timestart;
    }

    public String getTimeend() {
        return timeend;
    }

    public void setTimeend(String timeend) {
        this.timeend = timeend;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public Long getCreateBy() {
        return createBy;
    }

    public void setCreateBy(Long createBy) {
        this.createBy = createBy;
    }

    public String getCreateDate() {
        return createDate;
    }

    public void setCreateDate(String createDate) {
        this.createDate = createDate;
    }

    public Long getModifyBy() {
        return modifyBy;
    }

    public void setModifyBy(Long modifyBy) {
        this.modifyBy = modifyBy;
    }

    public String getModifyDate() {
        return modifyDate;
    }

    public void setModifyDate(String modifyDate) {
        this.modifyDate = modifyDate;
    }

    public String getLastLoad() {
        return lastLoad;
    }

    public void setLastLoad(String lastLoad) {
        this.lastLoad = lastLoad;
    }

    public Set<Candidate> getCandidates() {
        return candidates;
    }

    public void setCandidates(Set<Candidate> candidates) {
        this.candidates = candidates;
    }

    public Project getProject() {
        return project;
    }

    public void setProject(Project project) {
        this.project = project;
    }


    public Set<MatchedCertificate> getMatchedCertificates() {
        return matchedCertificates;
    }

    public void setMatchedCertificates(Set<MatchedCertificate> matchedCertificates) {
        this.matchedCertificates = matchedCertificates;
    }

    public Set<MatchedLanguage> getMatchedLanguages() {
        return matchedLanguages;
    }

    public void setMatchedLanguages(Set<MatchedLanguage> matchedLanguages) {
        this.matchedLanguages = matchedLanguages;
    }

    public Set<MatchedTechSkill> getMatchedTechSkills() {
        return matchedTechSkills;
    }

    public void setMatchedTechSkills(Set<MatchedTechSkill> matchedTechSkills) {
        this.matchedTechSkills = matchedTechSkills;
    }

    public Job() {
    }

    public Job(@Size(max = 300) String description, @Size(max = 300) String role, @Size(max = 10) String timestart,
            @Size(max = 10) String timeend, @Size(max = 10) String status, Long createBy,
            @Size(max = 10) String createDate, Long modifyBy, @Size(max = 10) String modifyDate,
            @Size(max = 50) String lastLoad) {
        super();
        this.description = description;
        this.role = role;
        this.timestart = timestart;
        this.timeend = timeend;
        this.status = status;
        this.createBy = createBy;
        this.createDate = createDate;
        this.modifyBy = modifyBy;
        this.modifyDate = modifyDate;
        this.lastLoad = lastLoad;
    }

}

@Entity(name = "matchedcertificate")
@Table(name = "matchedcertificate")
@Data
public class MatchedCertificate {

    private static final int MAX10 = 10;
    private static final int MAX50 = 50;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private Long id;

    @Size(max = MAX50)
    @Column(name = "name", nullable = false)
    private String name;

    @Column(name = "score")
    private float score;

    @Column(name = "createBy", nullable = false)
    private Long createBy;


    @Size(max = MAX10)
    @Column(name = "createDate", nullable = false)
    private String createDate;

    @Column(name = "modifyBy")
    private Long modifyBy;

    @Size(max = MAX10)
    @Column(name = "modifyDate")
    private String modifyDate;

    @Size(max = MAX50)
    @Column(name = "lastLoad", nullable = false)
    private String lastLoad;

    @JsonBackReference
    @ManyToOne
    @JoinColumn(name = "jobid")
    private Job job;

}

@Entity(name = "matchedlanguage")
@Table(name = "matchedlanguage")
@Data
public class MatchedLanguage {

    private static final int MAX10 = 10;
    private static final int MAX20 = 20;
    private static final int MAX50 = 50;
    private static final int MAX100 = 100;
    private static final int MAX300 = 300;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private Long id;

    @Size(max = MAX50)
    @Column(name = "name", nullable = false)
    private String name;

    @Column(name = "level", length = 5, nullable = false)
    private int level;

    @Min(1950)
    @Column(name = "lastused")
    private int lastused;

    @Column(name = "createBy", nullable = false)
    private Long createBy;

    @Size(max = MAX10)
    @Column(name = "createDate", nullable = false)
    private String createDate;

    @Column(name = "modifyBy")
    private Long modifyBy;

    @Size(max = MAX10)
    @Column(name = "modifyDate")
    private String modifyDate;

    @Size(max = MAX50)
    @Column(name = "lastLoad", nullable = false)
    private String lastLoad;

    @JsonBackReference
    @ManyToOne
    @JoinColumn(name = "jobid")
    private Job job;
}
@Entity(name = "matchedtechskill")
@Table(name = "matchedtechskill")
@Data
public class MatchedTechSkill {

    private static final int MAX10 = 10;
    private static final int MAX50 = 50;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private Long id;

    @Size(max = MAX50)
    @Column(name = "name")
    private String name;

    @Column(name = "level", length = 10, nullable = false)
    private int level;

    @Size(max = MAX10)
    @Column(name = "experience")
    private String experience;

    @Min(1950)
    @Column(name = "lastused")
    private int lastused;

    @Column(name = "createBy", nullable = false)
    private Long createBy;

    @Size(max = MAX10)
    @Column(name = "createDate", nullable = false)
    private String createDate;

    @Column(name = "modifyBy")
    private Long modifyBy;

    @Size(max = MAX10)
    @Column(name = "modifyDate")
    private String modifyDate;

    @Size(max = MAX50)
    @Column(name = "lastLoad", nullable = false)
    private String lastLoad;

    @JsonBackReference
    @ManyToOne
    @JoinColumn(name = "jobid")
    private Job job;
}

@实体(name=“项目”)
@表(name=“项目”)
公共类项目{
专用静态最终int MAX10=10;
专用静态最终int MAX50=50;
专用静态最终int MAX100=100;
专用静态最终int MAX300=300;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“id”,nullable=false)
私人长id;
@尺寸(最大值=最大值100)
@列(name=“name”,nullable=false)
私有字符串名称;
@尺寸(最大值=最大值50)
@列(name=“company”,null=false)
私人弦公司;
@列(name=“teamsize”)
私人int团队规模;
@尺寸(最大值=最大值10)
@列(name=“timestart”,nullable=false)
私有字符串时间启动;
@尺寸(最大值=最大值10)
@列(name=“timeend”,null=false)
私有字符串时间结束;
@尺寸(最大值=MAX300)
@列(name=“description”)
私有字符串描述;
@列(name=“techskills”)
私人字符串技术技能;
@尺寸(最大值=最大值10)
@列(name=“status”,nullable=false)
私有字符串状态;
@列(name=“createBy”,nullable=false)
私人长假;
@尺寸(最大值=最大值10)
@列(name=“createDate”,nullable=false)
私有字符串createDate;
@列(name=“modifyBy”)
私人长时间修改;
@尺寸(最大值=最大值10)
@列(name=“modifyDate”)
私有字符串modifyDate;
@尺寸(最大值=最大值50)
@列(name=“lastLoad”,nullable=false)
私有字符串lastLoad;
@JsonManagedReference
@OneToMany(targetEntity=Job.class,mappedBy=“project”,fetch=FetchType.LAZY,cascade=CascadeType.ALL)
私人职业;
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getCompany(){
返回公司;
}
上市公司(字符串公司){
这个公司=公司;
}
public int getTeamsize(){
返回团队规模;
}
公共void settamsize(int teamsize){
this.teamsize=teamsize;
}
公共字符串getDescription(){
返回说明;
}
公共void集合描述(字符串描述){
this.description=描述;
}
公共字符串getTechskills(){
返回技术技能;
}
公共技能(字符串技术技能){
this.techskills=techskills;
}
公共长getCreateBy(){
返回createBy;
}
公共void setCreateBy(长createBy){
this.createBy=createBy;
}
公共字符串getCreateDate(){
返回创建日期;
}
公共void setCreateDate(字符串createDate){
this.createDate=createDate;
}
公共长getModifyBy(){
返回修改人;
}
公共void setModifyBy(长modifyBy){
this.modifyBy=modifyBy;
}
公共字符串getModifyDate(){
返回修改日期;
}
public void setModifyDate(字符串modifyDate){
this.modifyDate=modifyDate;
}
公共字符串getLastLoad(){
返回上次加载;
}
公共void setLastLoad(字符串lastLoad){
this.lastLoad=lastLoad;
}
公共集getJobs(){
返回工作岗位;
}
公共无效设置作业(设置作业){
这个.工作=工作;
}
公共字符串getStatus(){
返回状态;
}
公共无效设置状态(字符串状态){
这个状态=状态;
}
公共字符串getTimestart(){
返回时间开始;
}
公共void setTimestart(字符串timestart){
this.timestart=timestart;
}
公共字符串getTimeend(){
返回时间结束;
}
公共void setTimeend(字符串timeend){
this.timeend=timeend;
}
}
@实体(名称=“职务”)
@表(name=“job”)
@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class,property=“id”,scope=Job.class)
公开课工作{
专用静态最终int MAX10=10;
专用静态最终int MAX50=50;
专用静态最终int MAX300=300;
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@列(name=“id”,nullable=false)
私人长id;
@尺寸(最大值=MAX300)
@列(name=“description”,nullable=false)
私有字符串描述;
@尺寸(最大值=MAX300)
@列(name=“role”,nullable=false)
私有字符串角色;
@尺寸(最大值=最大值10)
@列(name=“timestart”,nullable=false)
私有字符串时间启动;
@尺寸(最大值=最大值10)
@列(name=“timeend”,null=false)
私有字符串时间结束;
@尺寸(最大值=最大值10)
@列(name=“status”,nullable=false)
私有字符串状态;
@列(name=“createBy”,nullable=false)
私人长假;
@尺寸(最大值=最大值10)
@列(name=“createDate”,nullable=false)
私有字符串createDate;
@列(name=“modifyBy”)
私人长时间修改;
@尺寸(最大值=最大值10)
@列(name=“modifyDate”)
私有字符串modifyDate;
@尺寸(最大值=最大值50)
@列(name=“lastLoad”,nullable=false)
私有字符串lastLoad;
@JsonManagedReference
@杰索尼奥雷
@JsonManagedReference
@OneToMany(targetEntity = MatchedCertificate.class, mappedBy = "job", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<MatchedCertificate> matchedCertificates;

@JsonManagedReference
@OneToMany(targetEntity = MatchedLanguage.class, mappedBy = "job", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<MatchedLanguage> matchedLanguages ;

@JsonManagedReference
@OneToMany(targetEntity = MatchedTechSkill.class, mappedBy = "job", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<MatchedTechSkill> matchedTechSkills;
@JsonManagedReference
@OneToMany(targetEntity = MatchedCertificate.class, mappedBy = "matchedCertificate", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<MatchedCertificate> matchedCertificates;