当前位置: 首页 > 知识库问答 >
问题:

如何向Spring数据Jpa生成的查询添加一些自定义行为?

郭知
2023-03-14

我将SpringDataJPA与一个遗留Oracle数据库一起使用。我们的一些表使用char而不是varchar2类型。当我使用Spring数据Jpa生成的查询时,这会导致一些问题。

例如,我有一个名为用户的实体

@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数据将从username=?。但是,由于我的Oracle数据库使用char type作为列username,如果在没有填充足够空间的情况下传入username参数,我将不会得到任何结果。

userRepository.findByUsername("Chris") -> not result
userRepository.findByUsername("Chris[with 7 spaces]") -> 1 result

有什么办法可以向Spring Data Jpa添加一些自定义代码,并让Spring Data Jpa自动填充空格吗?我不想再次编写所有查询方法并手动填充空间,因为我已经在实体类()中添加了长度。

共有1个答案

郭坚壁
2023-03-14

如果您使用Hibernate作为JPA提供程序,可以通过创建Hibernate用户类型来实现。

  1. 创建名为CharType的自定义用户类型。在此类中执行必要的填充和修剪

Github上提供了完整的解决方案以及ChartType类。请参阅PersonRepositoryTest中的Person实体和测试用例,以了解如何在您自己的代码中集成类似的内容。

 类似资料:
  • 在我的数据库中,我有一个具有以下属性的表“CITA”:id,fecha\u hora,description,id\u empleado,id\u cliente。 我还有一个Spring JPA存储库: 我需要这个查询: 我的问题是我不知道我应该把它放在哪里来还给我像地图这样的东西 因为它不起作用: 编辑 如果我试图从我的REST控制器调用estadistic as(),我有一个错误。 这是我的

  • 问题内容: 我正在研究Spring Data JPA。考虑下面的示例,默认情况下我将使所有crud和finder功能正常工作,如果我想自定义finder,那么也可以在界面本身中轻松完成。 我想知道如何为上述AccountRepository的实现添加完整的自定义方法?由于它是一个接口,所以我不能在那里实现该方法。 问题答案: 你需要为自定义方法创建一个单独的接口: 并提供该接口的实现类:

  • 我有一个实体 及其存储库 注意:如您所见,intValue不是entity类的成员变量。

  • 我使用的是Spring Data JPA 1.7.1 这里有一个例子:

  • 我有两个实体: ffice.java 电影JAVA 和以下存储库: 现有的查找方法像左连接一样工作,这正是我需要的。但是如何在不保存电影对象的情况下保存周BoxOffice对象?我真的不知道创建周刊BoxofficeLite的想法。现在它给了一个例外 组织。springframework。刀。InvalidDataAccessApiUsageException:org。冬眠TransientPro

  • 使用Spring Boot应用程序。我有一个类UserService,我在其中创建了一个动态查询,根据请求参数具有多个or条件: 我有UserRepository接口,我需要执行这个查询。到目前为止,我使用了findById等JPA函数或@Query(“从事件中选择id”)。 如何将此查询从服务类传递到存储库并执行它?