我将Spring Data Jpa与旧版Oracle数据库一起使用。我们的一些表使用 char 而不是 varchar2 类型。当我使用Spring Data Jpa生成的查询时,这会导致一些问题。
例如,我有一个名为User
的实体@Entity
@Table(name = "USERS")
public class User implements Serializable {
private static final long serialVersionUID = -4054737587007197812L;
@Id
private Long userId;
@Column(columnDefinition = "char", length = 12)
private String username;
}
我的UserRepository就像:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
public User findByUsername(String name);
}
像往常一样,Spring Data会生成一个查询,例如 select * from users where username =?。但由于我的Oracle数据库使用char类型作为列用户名,如果我传入username参数而没有填充足够的空间,我将不会得到任何结果。
userRepository.findByUsername("Chris") -> not result
userRepository.findByUsername("Chris[with 7 spaces]") -> 1 result
有没有向Spring Data Jpa添加一些自定义代码,让Spring Data Jpa自动填充空格?我不想再次编写所有查询方法并手动填充空格,因为我在Entity类()中添加了长度。
答案 0 :(得分:0)
如果您使用Hibernate作为JPA提供程序,可以通过创建Hibernate UserType来实现。
CharType
的自定义用户类型。在此课程中执行必要的填充和修剪。CHAR(n)
作为支持数据类型注释使用CharType
的字段。完整的解决方案以及CharType
类是available on Github。请参阅Person中的PersonRepositoryTest实体和测试用例,以获取有关如何在您自己的代码中集成此类内容的指导。