我遇到这么一个业务:用户每次会给出一个List,里面放了一些某类型实体。实体只对应一张表,这张表呢有一个业务主键,还有个自然主键。自然主键那列上弄了个唯一约束现在想达到这样一个效果:持久化用户给出的List的时候,遇到与数据库中重复的(自然主键重复)就跳过,继续往下走。
但是呢,我在发现session一旦发生异常就不能正常终止了,提示session不能在发生异常后执行flush。我想了想,数据库都是并发的,不可能通过“检查-判断-行动”这个逻辑。。数据库默认的事务隔离级别也帮不了什么忙但是我又不能锁住整张表用hibernate的悲观锁的话不知行不行,我还没试,请各路大侠给个思路~~~~~~~~~~~~~~~~

解决方案 »

  1.   

    你可以使用JDBC试试。代码如下:
    public void test() throws ClassNotFoundException, SQLException {
    Class.forName("com.mysql.jdbc.Driver");
    Connection conn = null;
    PreparedStatement ps = null;
    String sql = "insert into user(name, birthday) values(?,?)";
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/hibernate", "root", "0083");
    ps = conn.prepareStatement(sql);
    String[] users = new String[]{"123", "222"};
    for(String str : users){
    try {
    ps.setString(1, str);
    ps.setDate(2, new Date(System.currentTimeMillis()));
    ps.executeUpdate();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    if(ps != null){
    ps.close();
    }
    if(conn != null){
    conn.close();
    }
    }