原生SQL查询字段类型转换异常处理

//NVARCHAR转换异常

public class MyOracleDialect extends Oracle10gDialect {
    public MyOracleDialect() {
        super();
        registerHibernateType(Types.NVARCHAR, StandardBasicTypes.STRING.getName());
    }
}

将方言类型调换成自定义类型 

# oracle 数据库连接
#    dialect: org.hibernate.dialect.Oracle10gDialect
#将方言类型调换成自定义类型
    dialect: com.gantang.common.service.impl.MyOracleDialect
    driverClassName: oracle.jdbc.driver.OracleDriver

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是示例代码: 首先,我们需要有一个实体类,假设我们有一个名为User的实体类,其中有id、name、age三个字段: ``` @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Integer age; // 省略Getter和Setter } ``` 接下来,我们需要创建一个Dto,用于返回查询结果,假设我们需要返回id和name两个字段,我们可以创建一个名为UserDto的类: ``` public class UserDto { private Long id; private String name; private Set<Integer> ages; // 省略Getter和Setter } ``` 注意,这里我们在Dto中添加了一个set类型字段ages,这是为了演示如何返回set类型的结果。 接下来,我们可以使用entityManager来构建sql查询,查询结果将会被映射到UserDto对象中,同时我们也可以使用setResultTransformer来转换set类型的查询结果,示例代码如下: ``` String sql = "SELECT id, name, age FROM user WHERE id = :id"; Query query = entityManager.createNativeQuery(sql); query.setParameter("id", 1L); query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(UserDto.class)); UserDto userDto = (UserDto)query.getSingleResult(); ``` 在上面的示例代码中,我们首先定义了一条sql查询,使用了命名参数:id,接下来我们使用createNativeQuery方法创建了一个原生的Query对象,并设置了id参数的值,然后使用unwrap方法将Query对象转换成了SQLQuery对象,最后使用setResultTransformer方法将查询结果映射到了UserDto对象中,并将ages字段转换成了set类型的数据。 请注意,这里的setResultTransformer方法需要使用hibernate的Transformer接口实现类,例如上面示例代码中使用的是Transformers类的aliasToBean方法创建的映射器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值