Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
弹簧数据+;Hibernate:插入有两个表(模式和子表)时出现问题。无效的列名_Hibernate_Jakarta Ee_Persistence_Spring Data - Fatal编程技术网

弹簧数据+;Hibernate:插入有两个表(模式和子表)时出现问题。无效的列名

弹簧数据+;Hibernate:插入有两个表(模式和子表)时出现问题。无效的列名,hibernate,jakarta-ee,persistence,spring-data,Hibernate,Jakarta Ee,Persistence,Spring Data,我很高兴参加这个网站。我是堆栈溢出方面的新手,但总有第一次:) 目前,我正在使用SpringData1.3.0和Hibernate4.1.9,使用JPA2.0 overJava生成基于存储库的查询,数据库是SQLServer2008。我需要对两个表进行插入操作:一个名为pattern_table的模式表。此表被另一个名为CHILD_表的表引用,它们之间的关系为一对多。我为这个需求开发解决方案的指南是下面的链接:,我正试图将其应用于spring数据支持(存储库管理)。但是它失败了,因为Hibern

我很高兴参加这个网站。我是堆栈溢出方面的新手,但总有第一次:)

目前,我正在使用SpringData1.3.0和Hibernate4.1.9,使用JPA2.0 overJava生成基于存储库的查询,数据库是SQLServer2008。我需要对两个表进行插入操作:一个名为pattern_table的模式表。此表被另一个名为CHILD_表的表引用,它们之间的关系为一对多。我为这个需求开发解决方案的指南是下面的链接:,我正试图将其应用于spring数据支持(存储库管理)。但是它失败了,因为Hibernate在插入时,尝试查找一个不存在于CHILD_表(在数据库中)和映射实体中的列。我不知道为什么Hibernate试图找到这个列名,我支持它是一个别名(称为patternTable_CODIGO)。错误由以下日志注册表定义:

Hibernate: insert into GDA.dbo.PATTERN_TABLE (COLUMN_A, COLUMN_B, COLUMN_C, COLUMN_D) values (?, ?, ?, ?)
(...)
Hibernate: insert into GDA.dbo.CHILD_TABLE (COLUMN_CHILD_A, COLUMN_CHILD_B, patternTable_CODIGO) values (?, ?, ?) --->patternTable_CODIGO doesn't exists in the database!!!
2013-09-19 18:05:12,967 [Thread-18] [SqlExceptionHelper:logExceptions] WARN  SQL Error: 207, SQLState: 42S22
2013-09-19 18:05:12,967 [Thread-18] [SqlExceptionHelper:logExceptions] ERROR [FMWGEN][SQLServer JDBC Driver][SQLServer]Invalid column name 'patternTable_CODIGO'.
2013-09-19 18:05:12,967 [Thread-18] [SqlExceptionHelper:logExceptions] WARN  SQL Error: 8180, SQLState: HY000
2013-09-19 18:05:12,968 [Thread-18] [SqlExceptionHelper:logExceptions] ERROR [FMWGEN]        [SQLServer JDBC Driver][SQLServer]Statement(s) could not be prepared.
org.springframework.dao.InvalidDataAccessResourceUsageException: [FMWGEN][SQLServer JDBC Driver][SQLServer]Invalid column name 'patternTable_CODIGO'.; 
SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: [FMWGEN][SQLServer JDBC Driver][SQLServer]Invalid column name 'patternTable_CODIGO'.
   at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:635)
   at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:106)
   at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:403)
   (...)
   at sun.proxy.$Proxy274.save(Unknown Source)
   at co.com.myproject.impl.PatternTableServiceImpl.guardar(PatternTableServiceImpl.java:25)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   (...)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
   at sun.proxy.$Proxy275.guardar(Unknown Source)
   at co.com.myproject.principal.GenerarPlano.inicio(GenerarPlano.java:102)
Caused by: org.hibernate.exception.SQLGrammarException: [FMWGEN][SQLServer JDBC Driver][SQLServer]Invalid column name 'patternTable_CODIGO'.
   at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82)
   at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
   at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
   at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110)
   at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129)
   at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
   at sun.proxy.$Proxy264.executeUpdate(Unknown Source)
   at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:96)
   at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:58)
   at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2936)
   at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3447)
   at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81)
   at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362)
   at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:203)
   at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:183)
   at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:167)
   at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:320)
   at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:287)
   at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193)
   at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126)
   at org.hibernate.ejb.event.EJB3MergeEventListener.saveWithGeneratedId(EJB3MergeEventListener.java:71)
   at org.hibernate.event.internal.DefaultMergeEventListener.saveTransientEntity(DefaultMergeEventListener.java:236)
   at org.hibernate.event.internal.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:216)
   at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:154)
   at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:913)
   at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:895)
   at org.hibernate.engine.spi.CascadingAction$6.cascade(CascadingAction.java:288)
   at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:383)
   at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326)
   at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)
   at org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:412)
   at org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:353)
   at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:329)
   at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)
   at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165)
   at org.hibernate.event.internal.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:448)
   at org.hibernate.event.internal.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:220)
   at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:154)
   at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:76)
   at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:903)
   at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:887)
   at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:891)
   at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:879)
   at sun.reflect.GeneratedMethodAccessor280.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:241)
   at sun.proxy.$Proxy256.merge(Unknown Source)
   at org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:353)
   at sun.reflect.GeneratedMethodAccessor278.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:333)
   at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:318)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
   at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
   at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
   at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:155)
   ... 33 more
这是
模式表
实体:

package co.com.myproject.persistencia;
// ... libraries
import javax.persistence.*;

@Entity
@Table(name = "PATTERN_TABLE", schema = "dbo", catalog = "GDA")
public class PatternTable implements Serializable {
    private static final long serialVersionUID = 1L;
    private int codigo;

    // ... a lot of mapped fields...

    private Set<ChildTable> childTable = new HashSet<ChildTable>(0);

    public PatternTable() {}

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "CODIGO")
    public int getCodigo() {
            return codigo;
    }

    public void setCodigo(int codigo) {
            this.codigo = codigo;
    }

    // ... a lot of getters and setters...

    @OneToMany(cascade = CascadeType.ALL)
    @JoinColumn(name="CODIGO_PATTERN_TABLE")
    public Set<ChildTable> getChildTable() {
            return childTable;
    }

    public void setChildTable(Set<ChildTable> childTable) {
            this.childTable = childTable;
    }
}
这是我的
模式表的存储库界面

@Transactional(readOnly = true)
public interface PatternTableRepository extends JpaRepository<PatternTable, Integer> {
    List<PatternTable> findByPatternParameter(String patternParameter);
    // ... more code next
}
模式表
的对象通过以下方式收集一个或多个
子表

childTable = new ChildTable();
//...set attributes of childTable...
patternTable.getChildTable().add(childTable); 

如果我的英语不流利,我很抱歉。我会设法找到解决办法,但如果你能帮助我,我会感谢你的帮助。非常感谢!:)

嗯。。。我无法为这个问题找到理想的解决方案,但我可以找到一个非常快速和简单的解决方案。这项工作如下:

//Entity definition and getters / setters...        
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "CODIGO_PATTERN_TABLE", nullable = false)
public PatternTable getPatternTable() {
    return patternTable;
}
//More getters and setters...
//Entity definition and getters / setters... 
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "patternTable")
public Set<ChildTable> getChildTable() {
    return childTable;
}
//More getters and setters...
  • PatternTable
    ChildTable
    实体bean中编写一些更改。在
    ChildTable
    中,在@manytone注释之后,添加FetchType和JoinColumn,如下所示:

    //Entity definition and getters / setters...        
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "CODIGO_PATTERN_TABLE", nullable = false)
    public PatternTable getPatternTable() {
        return patternTable;
    }
    //More getters and setters...
    
    //Entity definition and getters / setters... 
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "patternTable")
    public Set<ChildTable> getChildTable() {
        return childTable;
    }
    //More getters and setters...
    
    此外,在
    PatternTable
    entitybean中,修改@OneToMany关系如下:

    //Entity definition and getters / setters...        
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "CODIGO_PATTERN_TABLE", nullable = false)
    public PatternTable getPatternTable() {
        return patternTable;
    }
    //More getters and setters...
    
    //Entity definition and getters / setters... 
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "patternTable")
    public Set<ChildTable> getChildTable() {
        return childTable;
    }
    //More getters and setters...
    
    //实体定义和getter/setter。。。
    @OneToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL,mappedBy=“patternTable”)
    公共集getChildTable(){
    返回子表;
    }
    //更多的能手和二传手。。。
    
  • 修改实体bean的保存方法。第一次,我保存了
    PatternTable
    实体bean,没有
    ChildTable
    s的集合。之后,我将
    ChildTable
    s'集合与它们各自的
    patternatable
    相关联,并通过
    ChildTable
    创建了一个新的存储库来保存它们

  • 非常感谢您复习这个问题,并为我糟糕的英语道歉!:)