Tag: hibernate

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 = […]

覆盖一些控制器的@JsonIgnore注释。 杰克逊。 弹簧

我只需要将照片字段仅用于直接请求到实体。 但是,当用户向所有MediaHolders对象发出请求时,仅使用photoSize序列化短信息。 我正在使用Kotlin,Jackson,Spring和Hibernate。 我试过了: 在控制器上的@JsonView。 不起作用。 JsonView不覆盖@JsonIgnore的行为。 或者我需要注释基本PersonalDomainObject类和所有控制器中的所有字段,这是不适合我。 自定义JsonFilter,但相同,它不会看到忽略字段。 而且我不能在不同的控制器上添加不同的过滤器。 也许我错过了一些东西,但我认为这是优化中的常见任务。 非常感谢您的任何建议! @JsonIgnoreProperties("createdAt", "updatedAt", "owner", "hibernateLazyInitializer", "handler") open class MediaHolder : PersonalDomainObject() { @OneToMany(cascade = arrayOf(CascadeType.PERSIST, CascadeType.REMOVE), mappedBy = "mediaHolder") @LazyCollection(LazyCollectionOption.EXTRA) var photos:MutableList<Photo> = mutableListOf() val photosSize: Int get() = photos.size }

重写Kotlin的财产二传导致两个JPA @Id

我有三个代表Hibernate实体的Kotlin类: @MappedSuperclass abstract class Parent { @Id @GeneratedValue @Column(nullable=false) var id: Long? = null } @Entity class Child1 {} @Entity class Child2 { @Id @GeneratedValue @Column(nullable=false) override var id: Long? = null set(value) { super.id = value doSomething() } } 注意我需要重写id的setter以后调用doSomething 。 这是我以前在Java中完成id的方式。 它构建正确,但Hibernate不喜欢它: A foreign key refering Child2 from … has the wrong number […]

kotlin:注释中数组的一些问题

我在注释中遇到了一些问题: Entity Table(uniqueConstraints = array(UniqueConstraint(columnNames = array("key", "userid")))) public class … 在这种情况下,我得到以下错误: 类型推断失败。 期望的类型不匹配:找到:kotlin.Array必需:kotlin.String uniqueConstraints = array(…)没有问题,但是Idea在columnNames = array(…)中显示错误 我使用hibernate-jpa-2.1-api-1.0.0.Final.jar 解决方法 :使用组合键(@ javax.persistence.IdClass)来替代uniqueConstraints

Kotlin数据类的equals()方法是否可以在没有进一步修改的情况下与JPA结合使用?

Kotlin有一个Data类,包含toString(), equals(), hashCode(), and copy() 。 可以使用equals() and hashCode()直接开箱即用,而无需进一步调整JPA类? 我们通常不得不在下面链接的文章中花费大量时间阅读“自然键”,持久化上下文生命周期等,然后再确信我们做的是正确的事情: 等于和哈希码 在-JPA的哈希码,等于-困境 我们现在可以简单地依靠Kotlin的equals() and hashcode()实现吗?

扩展Kotlin数据类以便与JPA一起使用?

Kotlin有一个Data类,可以自动实现equals和hashcode ,但是这些在JPA上下文中仍然不能自动使用 。 为了弥补这一点,我想知道如何扩展Data类型,以便分配一个“业务密钥”或id属性是final和non updatable并用作为业务密钥的UUID初始化,并有equals()和hashcode()方法使用该属性的实现。 我大致在想这样的事情: jpa class User(id: JpaId, val name: String, val age: Int) jpa class User(bid: JpaBid, val name: String, val age: Int) 而不是像这样使用Data类: data class User(bid: long, val name: String, val age: Int) 我们正在使用一种新的类jpa 。 我们还有两个新的类型, JpaId和JpaBid ,用来确定id属性是否应该是UUID或商业密钥,如ISBN号,sku等 如果使用JpaId类型,则会自动生成密钥。 如果使用JpaBid则应该在构造函数中提供该键。 这将确保只要JPA实体被构建,它就可以被唯一标识。 思考? 这是在Kotlin中做的非常直接的事情,还是我们需要在JVM烤架(Kotlin的新品牌)中起床?

Kotlin与JPA / Hibernate:没有“开放”没有懒加载?

大多数Kotlin JPA示例代码看起来像这样 class Person(val name: String, val age: Int) { /* … */ } 甚至 data class Person(val name: String="", val age: Int=0) { /* … */ } 现在, Hibernate用户指南和其他几个ORM都表示,他们通常要创建代理或扩展模型类,但是为了允许在Kotlin中将类明确定义为open 。 这对于数据类来说目前是不可能的,从我自己的经验来看,大多数人在Kotlin编写JPA实体时并没有考虑这个问题。 所以,来我的问题(毕竟这是stackoverflow),是否足够 open class Person(val name: String, val age: Int) { /* … */ } 或者我们真的不得不这样做 open class Person(open val name: String, open val […]

与JPA Kotlin:默认构造函数地狱

按照JPA的要求,@ @Entity类应该有一个默认的(非arg)构造函数来从数据库中检索对象时实例化对象。 在Kotlin中,属性在主构造函数中声明非常方便,如下例所示: class Person(val name: String, val age: Int) { /* … */ } 但是,当非参数构造函数被声明为次要构造函数时,它需要传递主构造函数的值,所以需要一些有效的值,如下所示: @Entity class Person(val name: String, val age: Int) { private constructor(): this("", 0) } 如果这些属性比String和Int有更复杂的类型,并且它们是不可空的,那么为它们提供值看起来完全不好,尤其是当主构造函数和init块中有很多代码,并且参数是积极使用 – 当它们被重新分配时,大部分代码将被重新执行。 而且, val -properties不能在构造函数执行后重新分配,所以不可变性也会丢失。 所以问题是:Kotlin代码如何适应与JPA无代码重复,选择“魔术”的初始值和不可变性的损失? PS除了JPA,Hibernate是否可以构造没有默认构造函数的对象呢?