java - Les données d'insertion par lots Hibernate sont toujours insérées de manière incomplète
某草草
某草草 2017-05-17 09:59:07
0
1
555

Lors de l'utilisation de la mise en veille prolongée pour insérer des données dans la base de données, j'ai constaté que seule une partie du total de plus de 2 000 données pouvait être insérée dans la base de données. Lors du débogage, j'ai constaté que l'objet était effectivement créé dans la boucle et le. save()La méthode a été appelée
Mon code est le suivant

.
    Configuration configuration = new Configuration().configure();
    SessionFactory sessionFactory = configuration.buildSessionFactory();
    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();

    String file = "src/1.xlsx";
    InputStream is = null;
    try {
        is = new FileInputStream(file);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    XSSFWorkbook xssfWorkbook = null;
    try {
        xssfWorkbook = new XSSFWorkbook(is);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // 获取每一个工作薄
    for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) {
        XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);
        if (xssfSheet == null) {
            continue;
        }
        // 获取当前工作薄的每一行

        for (int rowNum = 1; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
            XSSFRow xssfRow = xssfSheet.getRow(rowNum);
            if (xssfRow != null) {
                XSSFCell one = xssfRow.getCell(0);
                XSSFCell two = xssfRow.getCell(1);
                XSSFCell three = xssfRow.getCell(2);
                String name = getValue(three);
                String code;
                if (getValue(one).equals("沪市"))
                    code = "sh" + getValue(two);
                else
                    code = "sz" + getValue(two);
                StockName2Code s = new StockName2Code();
                s.setCode(code);
                s.setName(name);
                session.save(s);
                if (rowNum % 20 == 0) {
                    session.flush();
                    session.clear();
                }

            }
        }
    }
    tx.commit();
    session.close();
    sessionFactory.close();

Mon fichier de configuration est le suivant

` <!DOCTYPE configuration de mise en veille prolongée PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<configuration d'hibernation>

<session-factory>
    <!-- Database connection settings -->

    <!-- 表示使用 mysql 数据库驱动类 -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

    <!-- jdbc 的连接 url 和数据库 -->
    <property name="connection.url">jdbc:mysql://*******/******?useUnicode=true&amp;characterEncoding=UTF-8</property>

    <!-- 数据库用户名 -->
    <property name="connection.username">root</property>

    <!-- 密码(这里为空) -->
    <property name="connection.password">********</property>

    <!-- JDBC connection pool (use the built-in) -->
    <!-- <property name="connection.pool_size">1</property> -->

    <!-- 数据库使用的方言 -->
    <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>

    <!-- Echo all executed SQL to stdout -->
    <!-- 设置 打印输出 sql 语句 为真 -->
    <property name="show_sql">true</property>

    <!-- 设置格式为 sql -->
    <property name="format_sql">true</property>

    <!-- 第一次加载 hibernate 时根据实体类自动建立表结构,以后自动更新表结构 -->
    <property name="hbm2ddl.auto">update</property>

    <!-- 映射文件 -->
    <mapping class="pojo.StockName2Code" />
</session-factory>

</configuration d'hibernation> `

Bien qu'aucune exception de mémoire insuffisante n'ait été levée, lors de la recherche, j'ai découvert que cela pouvait être dû à un problème de cache de mise en veille prolongée. J'ai donc ajouté un bloc de code qui forçait l'actualisation tous les 20 éléments, mais à la fin, j'ai trouvé qu'il restait n'a eu aucun effet, et l'opération d'insertion, je ne peux toujours en faire qu'une partie, y a-t-il une raison possible ?

某草草
某草草

répondre à tous(1)
世界只因有你

hibernate a été défini sur show_sql. Le nombre de SQL imprimés est-il cohérent avec le nombre de données Excel

?
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal