Tag: spring data jpa

Jpa Specification来查找字段值的子集

我正在持久层上使用Spring Data JPA编写JpaSpecificationExecutor应用程序,更具体地说,我的DAO扩展了JpaSpecificationExecutor接口,所以我能够实现某种过滤器; 想象具有多个属性的Item列表(为了清楚起见,我省略了注释和其他元数据): data class Item(var tags: MutableList<String>) 在我的服务层上,我的过滤方法如下所示: fun findBy(tagsToFilterBy: List<String>): List<Items> { return dao.findAll { root, query, builder -> builder.//?? } } 我想要实现的是仅检索包含完全tagsToFilterBy ,换句话说, tagsToFilterBy应该是tagsToFilterBy一个子集。 我知道isMember(…)方法,但我认为它的使用不会很令人愉快,因为它只接受一个“实体”在调用。 你可以给我一些建议吗? 我的另一个问题是,是否可以直接使用用户输入,比如builder.like(someExpression, inputFromUser)或者我必须把它放在builder.parameter(…)然后query.setParameter(…) 。 谢谢你的任何想法

春天懒加载嵌套事务内部不工作

我用kotlin。 这是我的实体类: @Entity class Category( @Id @GeneratedValue(strategy = IDENTITY) val id: Int = 0, @NotBlank @Column(unique = true) var name: String, @OneToMany(mappedBy = "category") val subcategories: MutableSet<Subcategory> = mutableSetOf() ) @Entity class Subcategory( @Id @GeneratedValue(strategy = IDENTITY) val id: Int = 0, @NotBlank var name: String, @ManyToOne val category: Category ) 服务方式: @Transactional fun addSubcategory(model: […]

Spring Annotation @Transactional忽略了Kotlin中未经检查的异常

我有JPA模块中的以下方法: @Throws(MyCustomException::class) @Transactional(rollbackOn = arrayOf(MyCustomException::class) fun update(test: Test): UpdatedTestMapped { //modify test try{ myRepository.save(test) }catch(jse: JpaSystemException) { throw MyCustomException() } //rest of code return mapper.map(test) } 在这种情况下,如果编码不正确,从hibernate框架中save()方法应该抛出一个应该被捕获的异常,并抛出MyCustomException 。 但是在运行时,第一个异常被忽略, MyCustomException不会被抛出,剩下的代码和返回语句正在被执行,第一个异常在执行return语句之后被抛出,但是没有被处理。 我有类似的方法只有没有返回语句和异常被抛出和捕获。 我不知道这种情况的原因是什么。 我已经编辑添加stacktrace java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F…' for column 'note' at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964) ~[mysql-connector-java-5.1.44.jar:5.1.44] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) ~[mysql-connector-java-5.1.44.jar:5.1.44] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) ~[mysql-connector-java-5.1.44.jar:5.1.44] at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527) […]

如何使用Spring Data JPA方法在Kotlin的try-with-resources块中返回Stream?

所以我想使用Kotlin创建一个使用Spring Data JPA项目的Spring Boot ,并让我说我有一个Person实体。 让我们这样说吧: @Entity public class Person { private @GeneratedValue @Id Long id; private String name; @OneToMany private List<Person> friends; … } 我将创建以下接口,以便能够使用Try-with-Resources和Stream<Person> 。 public interface PersonRepository extends Repository<Person, Long> { @Query("select p from Person p") Stream<Person> findAllStream(); } 所以通常在我的服务,我会这样做: @Service class MyService { @Autowired PersonRepository repository; List<String> foo() { try(Stream<Person> stream […]

JPA,Spring Data和Kotlin – 保存记录

从历史上看,我手动完成了Kotlin中的数据访问,并拥有一个我经常使用的特定数据结构: interface Id { val id: Int } data class Identity<ID : Id>( id: ID, version: Int ) data class Model<ID : Id, DATA>( identity: Identity<ID>, data: DATA ) 通过这样做,我可以有DAO看起来像这样: fun getUserById(id: UserId) : Model<UserId, UserData>() fun createUser(user: UserData) : Model<UserId, UserData>() 这一般运行良好,但意味着编写和测试DAO更费时间。 对于即将到来的项目,我正在考虑使用Spring Data JPA来做这件事 – 所以我可以将我的模型写成JPA实体,并让Spring Data完成所有与它们一起工作的繁重工作。 问题是 – 我无法用上面的数据处理一个简单的方法。 目前为止我所能看到的最好的方法是: 实体将ID存储为本地类型,并且手动获取器将其转换为丰富类型 默认的接口方法将丰富的类型和委托使用本机类型的版本 […]

Spring JPA无法在Kotlin数据类中使用自定义setter映射字段

我有一个自定义setter的Kotlin数据类。 Spring JPA框架似乎无法将属性映射到自定义设置器。 如果我删除自定义getter / setter并重命名属性login而不是_login ,一切似乎工作正常。 如何使用自定义设置器在Kotlin数据类中创建属性,以便在JPA框架中识别它? User.kt @Entity @Table(name = "jhi_user") @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) data class User ( @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator") @SequenceGenerator(name = "sequenceGenerator") var id: Long? = null, @NotNull @Pattern(regexp = Constants.LOGIN_REGEX) @Size(min = 1, max = 50) @Column(name = "login", length = 50, unique = true, nullable […]

Spring Data JPA如何使用Kotlin空值而不是可选值

我正在用Spring Data JPA和Kotlin编写一个Spring Boot应用程序,我注意到在CrudRepository有以下方法: Optional<T> findById(ID id); 不过,我正在使用Kotlin,它的处理空值的方式比Optional更加流畅。 有谁知道我会如何转换这种方法工作? fun findById(id: ID): T? 当我扩展Repository本身,并创建一个回购签名时,我得到的错误: java.lang.ClassCastException: java.util.Optional cannot be cast to com.books.Book