JPA 问题请教

2018-11-14 18:05:38 +08:00
 reid2017
@SQLInsert(sql = "insert ignore into tb_vip_code (code, duration) value (?, ?)")
public class VipCode extends BaseModel {
    private static final long serialVersionUID = -4697221755301869573L;

    private String code;
    private Integer duration;
    private Integer status;
    private Long userId;

    // 构造函数
}

如上实体类定义,@SQLInsert 注解的本意是在批量插入数据遇到唯一性约束时忽略,继续插入不重复的数据,但在调用 repository 的 save 方法插入数据是,总是报参数越界错误,有朋友遇到过吗?

Caused by: java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2).

单元测试代码如下:

@Test
    public void addOne() throws Exception {
        VipCode vipCode = new VipCode("123456", 1);
        service.addOne(vipCode);
    }
3613 次点击
所在节点    Java
22 条回复
reid2017
2018-11-15 12:05:58 +08:00
主键 ID 策略如下:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
//@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

两个策略都尝试过,一样的异常。
sutra
2018-11-15 12:20:32 +08:00
把日志打开吧,然后就知道生成的 SQL 语句到底什么样子了:

<Logger name="org.hibernate.SQL"
level="DEBUG" includeLocation="true"
additivity="false">
<AppenderRef ref="file-hibernate" />
</Logger>
<Logger name="org.hibernate.type"
level="TRACE" includeLocation="true"
additivity="false">
<AppenderRef ref="file-hibernate" />
</Logger>

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/507859

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX