jbpm4.4整合ssh的角色用户系统异常,因为原来系统已有一套用户系统,所以没有用jbpm的,自己去实现,继承覆盖了jbpm的user,group,groupmembership类,user的实现类是FareUser并且自己写了IdentitySessionImpl的实现,现在每次系统时报一下错误,但是如果在现有user表里添加EMAIL_字段就可以了,现在怀疑email字段已经被映射,所以造成重复对这个字段进行映射,可是当我把原有的User类删除掉,依然报如下错误,所以,应该也不是映射的问题,搞不明白了,有明白的帮帮忙,谢谢!Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'processEngine' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.jbpm.api.ProcessEngine org.jbpm.pvm.internal.processengine.SpringHelper.createProcessEngine()] threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.DuplicateMappingException:  Table [acct_user] contains phyical column name [email] represented by different logical column names: [EMAIL], [email]
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:581)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:983)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:879)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1075)
at test.jpbm.TestJbpm.<init>(TestJbpm.java:16)
at test.jpbm.TestJbpm.main(TestJbpm.java:21)
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.jbpm.api.ProcessEngine org.jbpm.pvm.internal.processengine.SpringHelper.createProcessEngine()] threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.DuplicateMappingException:  Table [acct_user] contains phyical column name [email] represented by different logical column names: [EMAIL], [email]
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:157)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:570)
... 11 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.DuplicateMappingException:  Table [acct_user] contains phyical column name [email] represented by different logical column names: [EMAIL], [email]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1075)
at org.jbpm.pvm.internal.processengine.SpringProcessEngine.get(SpringProcessEngine.java:116)
at org.jbpm.pvm.internal.processengine.SpringProcessEngine.create(SpringProcessEngine.java:64)
at org.jbpm.pvm.internal.cfg.ConfigurationImpl.buildProcessEngine(ConfigurationImpl.java:90)
at org.jbpm.pvm.internal.processengine.SpringHelper.createProcessEngine(SpringHelper.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:145)
... 12 more
Caused by: org.hibernate.DuplicateMappingException:  Table [acct_user] contains phyical column name [email] represented by different logical column names: [EMAIL], [email]
at org.hibernate.cfg.Configuration$MappingsImpl$TableColumnNameBinding.bindPhysicalToLogical(Configuration.java:2691)
at org.hibernate.cfg.Configuration$MappingsImpl$TableColumnNameBinding.addBinding(Configuration.java:2664)
at org.hibernate.cfg.Configuration$MappingsImpl.addColumnBinding(Configuration.java:2708)
at org.hibernate.cfg.Ejb3Column.addColumnBinding(Ejb3Column.java:306)
at org.hibernate.cfg.Ejb3Column.linkWithValue(Ejb3Column.java:298)
at org.hibernate.cfg.annotations.SimpleValueBinder.linkWithValue(SimpleValueBinder.java:323)
at org.hibernate.cfg.annotations.SimpleValueBinder.make(SimpleValueBinder.java:300)
at org.hibernate.cfg.annotations.PropertyBinder.makePropertyAndValue(PropertyBinder.java:188)
at org.hibernate.cfg.annotations.PropertyBinder.makePropertyValueAndBind(PropertyBinder.java:200)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1988)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:769)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:733)
at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:636)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:359)
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1206)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417)
... 28 more
SSHjBPM异常

解决方案 »

  1.   

    这是自己的用户角色系统覆盖jbpm的后的实现hibernate映射类
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    <class name="com.travelsky.fare.entityJbpm.FareUser" table="ACCT_USER">
    <id name="dbid" column="DBID">
    <generator class="assigned" />
    </id>
    <version name="dbversion" column="DBVERSION" />
    <property name="id" column="id" /> <!-- 登陆ID -->
    <property name="loginName" column="LOGIN_NAME_" /> <!-- 姓名 -->
    <property name="name" column="NAME" /> <!-- 姓名 -->
    <property name="password" column="PASSWORD" /> <!-- 密码 -->
    <property name="email" column="EMAIL" /> <!-- 电子邮件 -->
    </class> <class name="com.travelsky.fare.entityJbpm.FareRoleMembership" table="ACCT_USER_ROLE">
    <id name="dbid" column="DBID">
    <generator class="assigned" />
    </id>
    <version name="dbversion" column="DBVERSION" />
    <many-to-one name="user" column="USER_ID" class="com.travelsky.fare.entityJbpm.FareUser" foreign-key="FKFE85CB3E719BC739"  />
    <many-to-one name="role" column="ROLE_ID" class="com.travelsky.fare.entityJbpm.FareRole" foreign-key="FKFE85CB3ECC710359"  />
    <property name="name" column="NAME" />
    </class> <class name="com.travelsky.fare.entityJbpm.FareRole" table="ACCT_ROLE"> <id name="dbid" column="DBID">
    <generator class="assigned" />
    </id>
    <version name="dbversion" column="DBVERSION" />
    <property name="roleId" column="ID_" update="false" />
    <property name="name" column="NAME_" update="false" />
    </class>
    </hibernate-mapping>这是fareuser类
    package com.travelsky.fare.entityJbpm;import java.io.Serializable;
    import java.sql.Blob;
    import java.util.List;import org.jbpm.api.identity.User;import com.google.common.collect.Lists;
    import com.travelsky.fare.entity.Role;public class FareUser implements Serializable, User { private static final long serialVersionUID = 1L;
    private String id;
    protected int  dbversion;

    private String loginName;
    private String password;//为简化演示使用明文保存的密码
    private String name;
    private String email;
    private String test;
    public String getTest() {
    return test;
    } public void setTest(String test) {
    this.test = test;
    }
    private List<Role> roleList = Lists.newArrayList();//有序的关联对象集合
    public FareUser() { } public FareUser(String id, String loginName, String email) { this.id = id; this.loginName = loginName; this.email = email; } public void setDbversion(int dbversion) { this.dbversion = dbversion; }

    public int getDbversion() { return dbversion; }
    public long getDbid() { return Long.parseLong(id); } public void setDbid(long id) { this.id = String.valueOf(id); } public void setId(String id) { this.id = id; } // 实现User接口所必须实现的几个方法 public String getId() { return this.id; } public String getUserMail() { return email; } public void setUserMail(String email) { this.email = email; } public String getGivenName() { return null; } public String getFamilyName() { return null; } public String getBusinessEmail() { return this.email; }
    public String getLoginName() {
    return loginName;
    }
    public void setLoginName(String loginName) {
    this.loginName = loginName;
    }
    public String getPassword() {
    return password;
    }
    public void setPassword(String password) {
    this.password = password;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getEmail() {
    return email;
    }
    public void setEmail(String email) {
    this.email = email;
    }
    public List<Role> getRoleList() {
    return roleList;
    }
    public void setRoleList(List<Role> roleList) {
    this.roleList = roleList;
    }
    }下面是user表结构
    ID       NUMBER(19)         N
    EMAIL       VARCHAR2(255 CHAR) Y
    LOGIN_NAME    VARCHAR2(255 CHAR) N
    NAME       VARCHAR2(255 CHAR) Y
    PASSWORD      VARCHAR2(255 CHAR) Y
    DBVERSION     NUMBER(10)         Y
    BDID       NUMBER(19)         Y
    ORG       VARCHAR2(500 CHAR) Y
      

  2.   

    如果在user表里添加email_字段,然后再映射文件里改成<property name="email" column="EMAIL" />也就可以了,可是如果这样,就要在user表里有两个email相关字段,肯定不是办法,现在是在搞不明白怎么回事,困扰了3天了。