Tag: spring data

在使用自定义的AttributeConverter for Neo4j时获取Neo.ClientError.Statement.TypeError Spring Boot JPA

我有一个与Spring Data Neo4j(v5.0.0RC2),Neo4j(v3.2.1)和Neo4j OGM(v3.0.0)一起运行的Kotlin(v1.1.4)Spring Boot(v2.0.0.BUILD-SNAPSHOT)应用程序。 尝试对具有自定义AttributeConverter的字段使用自定义JPA @Query时收到以下错误。 堆栈跟踪: org.springframework.dao.InvalidDataAccessResourceUsageException: Error executing Cypher; Code: Neo.ClientError.Statement.TypeError; Description: Property values can only be of primitive types or arrays thereof; nested exception is org.neo4j.ogm.exception.CypherException: Error executing Cypher; Code: Neo.ClientError.Statement.TypeError; Description: Property values can only be of primitive types or arrays thereof at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at […]

Spring数据mongodb和集合模式设计

朋友,我有一个问题,如何组织和注释我的实体和弹簧数据配置为不同的关系? 我有关系的用户,钱包和余额实体: 一对一:用户钱包 一对多:钱包余额 我想在MongoDB中有下一个模式: > db.users.findOne() { _id : ObjectID(‘UUUU’), name : ‘Jason Statham’ } > db.wallets.findOne() { _id : ObjectID(‘WWWW’), user : ObjectID(‘UUUU’) balances : [ { currency: ‘USD’, balance: 100}, { currency: ‘EUR’, balance: 530.50 } ] } 电子钱包应该包含对ObjectID的引用,并且User被存储在单独的集合中 电子钱包应包含作为嵌入实体的余额 实体: data class User(val id: String, val name: String) data class Wallet(val […]

Kotlin的DAO应该返回Optional还是null?

在Kotlin / JPA之前,我曾经写过这样的DAO层: public interface UserDao extends JpaRepository { Optional findBySsn(String ssn); } 而在来电方,如果我想通过SSN找人或创建用户,我可以这样写: val user = userDao.findBySsn(value).orElseGet { userDao.save(value) } 它运作良好,看起来流利。 但是,由于Kotlin引入了无效安全,所以还有另外一种惯用的方式(Java中的dao): public interface UserDao extends JpaRepository { Optional findBySsn(String ssn); @Query(“select u from User u where u.ssn = :ssn”) @Nullable User findBySsnNullable(@Param(“ssn”) String ssn) } 而在客户端: val user = userDao.findBySsnNullable(value) .takeIf{ it -> […]

@CreationTimestamp和@UpdateTimestamp在Kotlin中不起作用

这是我的标记和发布实体类: @Entity class Tag( @get:NotBlank @Column(unique = true) val name: String = “”, val description: String = “” ) { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) val id: Int? = null @ManyToMany(mappedBy = “tags”) val posts: MutableSet = mutableSetOf() @CreationTimestamp lateinit var createDate: Date @UpdateTimestamp lateinit var updateDate: Date fun addPost(post: Post) { this.posts.add(post) post.tags.add(this) } } […]

Spring数据JPA中的动态查询

我正在寻找一个解决方案来动态构建使用Spring Data JPA的查询。 我有一个GameController,它有一个REST风格的服务端点/游戏,它需要4个可选参数:流派,平台,年份,标题。 这些API可能不会被传递,全部4个,以及它们之间的每个组合。 如果有任何参数未被传递,则默认为null。 我需要一个在仓库中的方法,将建立适当的查询,理想情况下,仍然允许Spring Data JPA分页,但我不知道这是可能的。 我发现这篇文章,但这似乎并不是我所需要的,除非我是误解。 http://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/ 我知道JPA有一个查询标准的API,但真的不知道如何实现这一点。 我意识到我可以为每个可能的场景创建一个方法,但这似乎是非常糟糕的做法和大量不必要的代码。 GameRepository: package net.jkratz.igdb.repository; import net.jkratz.igdb.model.Game; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; public interface GameRepository extends JpaRepository<Game, Long> { @Query("select g from Game g, GamePlatformMap gpm, Platform p where g = gpm.game and gpm.platform = p and p.id = […]

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

我用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-data-elasticsearch不使用Spring上下文中的objectmapper

我正在开发一个使用spring-data-elasticsearch进行数据存储的应用程序。 我也使用kotlin编写这个应用程序。 这有一些特殊的怪癖,一个是杰克逊需要杰克逊模块kotlin(摆脱无参数构造的问题)。 我也使用jackson-datatype-jsr310模块。 Spring引导足够好,可以从类路径中选择这些模块并自动注册它们。 我还将write-dates-as-timestamps选项设置为false。 然而,spring-data-elasticsearch似乎对此并不在意。 我想这是因为DefaultEntityMapper消息一个对象映射器,并没有使用从春天上下文。 我想知道为什么? 我通过提供一些额外的配置来确定它,以确保spring-data-elasticsearch使用从spring上下文中获得的objectmapper: @Configuration open class ElasticsearchConfig(val elasticsearchEntityMapper: ElasticsearchEntityMapper) { @Bean open fun elasticsearchTemplate(client: Client) = ElasticsearchTemplate(client, DefaultResultMapper(elasticsearchEntityMapper)) } @Component class ElasticsearchEntityMapper(val objectMapper: ObjectMapper) : EntityMapper { override fun mapToString(`object`: Any?) = objectMapper.writeValueAsString(`object`) override fun <T : Any?> mapToObject(source: String?, clazz: Class<T>?) = objectMapper.readValue(source, clazz) } 有没有更好/更简单的方法来确保spring-data-elasticsearch使用上下文中的objectmapper?

Kotlin使用SpringData Jpa定制存储库

这是我的代码。 我定制了我的存储库。 interface ChapterDao { fun test(novelId:String):List<Chapter> } class ChapterDaoImpl constructor(@PersistenceContext var entityManager: EntityManager){ fun test(novelId: String): List<Chapter> { val query = entityManager.createNativeQuery("select c.name, c.number from chapter c where c.novel.id = $novelId") val resultList = query.resultList as Array<Array<Any>> var chapterList:ArrayList<Chapter> = ArrayList<Chapter>() for (item in resultList){ chapterList.add(Chapter(item.get(0) as String,item.get(1) as Int)) } return chapterList } […]

如何使用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 […]

Spring数据Elasticsearch与Kotlin数据类的脚本字段导致Jackson序列化问题

当试图从Elasticsearch获取查询结果并将其映射到使用@org.springframework.data.elasticsearch.annotations.ScriptedField批注的Kotlin数据类时,结果实例似乎只用脚本字段创建,而不是其他字段被同时获取,因此导致.MissingKotlinParameterException 。 查询是通过ElasticsearchRepository#search方法完成的,该方法随Spring Data Elasticsearch提供,下面是相关的代码片段: val searchQuery = NativeSearchQueryBuilder() .withQuery(geoDistanceQuery("location").point(53.0, 10.0).distance("100km")) .withScriptField(ScriptField("distance", Script(ScriptType.INLINE, "expression", "doc['location'].arcDistance(params.latitude, params.longitude)", emptyMap()))) .withFilter(boolQuery().must(existsQuery("title"))) .withSort(SortBuilders.geoDistanceSort("location", 53.0, 10.0).order(SortOrder.ASC)) .withPageable(PageRequest.of(0, 10)) .build() val nearby = eventRepository.search(searchQuery) 具有更多上下文的堆栈跟踪: Caused by: com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException: Instantiation of [simple type, class de.nava.demo.events.model.Event] value failed for JSON property id due to missing (therefore NULL) value for creator parameter id which […]