Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.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 无法阻止jdbc驱动程序默认为LONG、OracleDB_Java_Oracle_Hibernate_Clob - Fatal编程技术网

Java 无法阻止jdbc驱动程序默认为LONG、OracleDB

Java 无法阻止jdbc驱动程序默认为LONG、OracleDB,java,oracle,hibernate,clob,Java,Oracle,Hibernate,Clob,问题是,当我有一个中等大小的4+字符的文件,但低于大约10k'ish。 然后驱动程序会将我的字符串默认为长字符串,这将导致以下错误: ORA-01461:只能为插入到长列中绑定长值 发现字符串大小在4k和40k之间时出错 我尝试了很多方法来改变这一点,但似乎没有任何效果。我真的希望有人能帮助我 以下是控制器类: @RequestMapping(value = "/uploadFile/{companiesId}/{day}/{month}/{year}/{userId}/{orgId}",

问题是,当我有一个中等大小的4+字符的文件,但低于大约10k'ish。 然后驱动程序会将我的字符串默认为长字符串,这将导致以下错误: ORA-01461:只能为插入到长列中绑定长值

发现字符串大小在4k和40k之间时出错

我尝试了很多方法来改变这一点,但似乎没有任何效果。我真的希望有人能帮助我

以下是控制器类:

@RequestMapping(value = "/uploadFile/{companiesId}/{day}/{month}/{year}/{userId}/{orgId}",
            method = RequestMethod.POST, headers = "Accept=*")
    public void uploadFile(@PathVariable("companiesId") int companiesId,
            @PathVariable("day") int day, @PathVariable("month") int month,
            @PathVariable("year") int year, @PathVariable("userId") int userId,
            @RequestParam(value = "file") MultipartFile multipartFile,
            Model model, HttpServletRequest request, HttpServletResponse response, @PathVariable("orgId") Integer orgId) {
        Calendar date = Calendar.getInstance();
        date.set(Calendar.YEAR, year);
        date.set(year, month - 1, day);
        System.out.println("date: " + date.getTime());
        String fileName = multipartFile.getOriginalFilename();
        String fileContent = null;
        try {
            InputStream is = multipartFile.getInputStream();
            byte[] bytes = IOUtils.toByteArray(is);
            String fileData = new String(bytes);
            fileContent = fileData ;

        } catch (IOException ex) {
            java.util.logging.Logger.getLogger(HomeController.class.getName()).log(Level.SEVERE, null, ex);
            throw new RuntimeException(ex);
        }
        Session session = sessionFactory.openSession();
        long insertedFileId = -1;
        Transaction t = session.beginTransaction();
        t.begin();
        if (fileContent != null) {
            ImportFile file = new ImportFile();
            file.setFileDate(date.getTime());
            file.setFileName(fileName);
            file.setContent(fileContent);
            file.setChangedBy(userId);
            file.setCreatedBy(userId);
            file.setCompaniesId(companiesId);
            file.setOrgId(orgId);
            session.persist(file);
            insertedFileId = file.getId();
        }
        t.commit();
}
以下是实体类:

    @Id
    @Column(name = "IMPORT_COST_FILES_ID")
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "WHMOD_SEQ")
    @SequenceGenerator(name = "WHMOD_SEQ", sequenceName = "warehouse.WHMOD_SEQ")
    private Long id;

    @Column(name = "FILE_NAME")
    private String fileName;
    @Column(name = "COMPANIES_ID")
    private Integer companiesId;
    @Column(name = "CHANGED_BY")
    private Integer changedBy;
    @Column(name = "CREATED_BY")
    private Integer createdBy;
    @Column(name = "FILE_CONTENT")
    @Lob
    private String content;
    @Column(name = "File_date")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date fileDate;
    @Column(name = "ORG_ID")
    private Integer orgId;
}
以下是相关的POM.xml信息:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>3.6.0.Final</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <version>1.8.0.10</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.0-api</artifactId>
        <version>1.0.0.Final</version>
        <scope>compile</scope>
    </dependency>

    <!-- Persistence Dependencies -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.3.2.GA</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-annotations</artifactId>
        <version>3.3.1.GA</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-commons-annotations</artifactId>
        <version>3.3.0.ga</version>
    </dependency>
数据库驱动程序版本:
DatabaseMetaData=session.connection.getMetaData;=版本:10.2.0.3.0

您使用的确切Oracle版本是什么?JDBC驱动程序的版本是什么?文件名中的数字不是驱动程序版本,而是预期的Java版本。问题表的CREATETABLE语句是什么?我如何看到驱动程序版本?create table语句将以秒的形式出现,要么调用DatabaseMetaData.getDriverVersion,要么查看jar中的MANIFEST.MF-较新的版本中有驱动程序版本。我已经尝试过了,结果是相同的错误,实际上我已经恢复到该错误。对于二进制数据或字符[],AFAIK@Lob应该放在字节[]或字节[]上或字符数据的字符串。它不应该是Clob类型。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jee="http://www.springframework.org/schema/jee"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <description>Example configuration to get you started.</description>
    <jee:jndi-lookup id="datasource" jndi-name="jdbc/LogisticsUserCoreDS"/> 
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="datasource" />
        <property name="packagesToScan" value="dk.org.importcost.domain" />

        <property name="schemaUpdate" value="false" />


        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory
                </prop>
                <prop key="hibernate.auto-import">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
            </props>
        </property>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>
    <context:component-scan base-package="dk.org.importcost.domain"/>
</beans>
 CREATE TABLE "WAREHOUSE"."IMPORT_COST_FILES" 
   (    "IMPORT_COST_FILES_ID" NUMBER(10,0) NOT NULL ENABLE, 
    "FILE_NAME" VARCHAR2(80 BYTE) NOT NULL ENABLE, 
    "FILE_DATE" DATE NOT NULL ENABLE, 
    "FILE_CONTENT" CLOB, 
    "STATUS_TYPES_ID" NUMBER(10,0), 
    "COMPANIES_ID" NUMBER(10,0) NOT NULL ENABLE, 
    "DELETED" VARCHAR2(1 BYTE) DEFAULT 'N', 
    "CREATED_BY" NUMBER(10,0) NOT NULL ENABLE, 
    "CREATED_DATE" DATE NOT NULL ENABLE, 
    "CHANGED_BY" NUMBER(10,0), 
    "CHANGED_DATE" DATE, 
    "ERROR_MSG" VARCHAR2(100 BYTE), 
    "ORG_ID" NUMBER(10,0), 
     CONSTRAINT "IMPORT_COST_FILES_PK" PRIMARY KEY ("IMPORT_COST_FILES_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "INDX"  ENABLE, 
     CONSTRAINT "WHICF_USERS_FK_1" FOREIGN KEY ("CREATED_BY")
      REFERENCES "SYSMODULE"."USERS" ("USERS_ID") ENABLE, 
     CONSTRAINT "WHICF_COMP_FK" FOREIGN KEY ("COMPANIES_ID")
      REFERENCES "SYSMODULE"."COMPANIES" ("COMPANIES_ID") ENABLE, 
     CONSTRAINT "WHICF_USERS_FK_2" FOREIGN KEY ("CHANGED_BY")
      REFERENCES "SYSMODULE"."USERS" ("USERS_ID") ENABLE, 
     CONSTRAINT "WHICF_STATYP_FK" FOREIGN KEY ("STATUS_TYPES_ID")
      REFERENCES "LOGISTICS"."STATUS_TYPES" ("STATUS_TYPES_ID") ENABLE, 
     CONSTRAINT "IMPCOST_COMP_FK" FOREIGN KEY ("ORG_ID")
      REFERENCES "SYSMODULE"."COMPANIES" ("COMPANIES_ID") ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "DATA" 
 LOB ("FILE_CONTENT") STORE AS BASICFILE (
  TABLESPACE "DATA" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION 
  NOCACHE LOGGING 
  STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) ;