我在这里得到了一个完整的示例应用程序:https://github.com/MrMojoR/hibernateOnKotlin
这段代码基于这篇博客文章:https://kotlinexpertise.com/hibernate-with-kotlin-spring-boot/
问题是,虽然懒惰提取在集成测试中工作得很好,但调试器中有一个异常:来自测试的异常
当我从控制器运行相同的代码时,没有异常,整个实体被加载:控制器没有异常
这怎么可能?非常感谢你的帮助!
无论如何,我将发布代码片段:
AbstractJpaPersistable.kt
import org.springframework.data.domain.Persistable
import org.springframework.data.util.ProxyUtils
import java.io.Serializable
import javax.persistence.GeneratedValue
import javax.persistence.Id
import javax.persistence.MappedSuperclass
import javax.persistence.Transient
/**
* Abstract base class for entities. Allows parameterization of id type, chooses auto-generation and implements
* [equals] and [hashCode] based on that id.
*
* This class was inspired by [org.springframework.data.jpa.domain.AbstractPersistable], which is part of the Spring Data project.
*/
@MappedSuperclass
abstract class AbstractJpaPersistable<T : Serializable> : Persistable<T> {
companion object {
private val serialVersionUID = -5554308939380869754L
}
@Id
@GeneratedValue
private var id: T? = null
override fun getId(): T? {
return id
}
/**
* Must be [Transient] in order to ensure that no JPA provider complains because of a missing setter.
*
* @see org.springframework.data.domain.Persistable.isNew
*/
@Transient
override fun isNew() = null == getId()
override fun toString() = "Entity of type ${this.javaClass.name} with id: $id"
override fun equals(other: Any?): Boolean {
other ?: return false
if (this === other) return true
if (javaClass != ProxyUtils.getUserClass(other)) return false
other as AbstractJpaPersistable<*>
return if (null == this.getId()) false else this.getId() == other.getId()
}
override fun hashCode(): Int {
return 31
}
}
Person.kt:
import javax.persistence.CascadeType
import javax.persistence.Entity
import javax.persistence.FetchType
import javax.persistence.ManyToOne
import javax.persistence.OneToMany
@Entity
class Person(
val name: String,
@ManyToOne(cascade = [(CascadeType.ALL)], fetch = FetchType.EAGER)
val street: Street
) : AbstractJpaPersistable<Long>()
@Entity
class Address(
val zipCode: String,
val city: String
) : AbstractJpaPersistable<Long>()
@Entity
class Street(
@OneToMany(cascade = [(CascadeType.ALL)], fetch = FetchType.LAZY)
val adresses: MutableSet<Address>
) : AbstractJpaPersistable<Long>()
PersonRepository:
import com.kotlinexpertise.hibernatedemo.model.Person
import org.springframework.data.jpa.repository.JpaRepository
interface PersonRepository : JpaRepository<Person, Long>
个人服务:
import com.kotlinexpertise.hibernatedemo.model.Person
import com.kotlinexpertise.hibernatedemo.repository.PersonRepository
import org.springframework.stereotype.Service
@Service
class PersonService(val personRepository: PersonRepository) {
fun savePerson(person: Person) {
personRepository.saveAndFlush(person)
}
}
解决方案:
Spring Boot中的spring.jpa.open in view=true属性是什么?
此属性应设置为false:
spring.jpa.open-in-view=false
这不是科特林问题,而是Spring问题。
Lazy依赖于它具有可用的活动连接这一事实。
连接由Hibernate中的EntityManager管理。
但调试器运行在完全不同的线程上,因此它无法访问EntityManager。因此有例外。
我有一个JavaSpring Boot Application,我已经将服务器配置为在SSL上运行,这是强制性的。 我已经为我的域创建了一个证书从LetsEncrypt证书,并通过运行为keystore创建了一个p12文件 我想用Ingress Nginx控制器在Kubernetes上公开它,所以我创建了一个秘密 我已经部署了应用程序,可以看到部署文件,当我将本地8443端口转发到其服务的8443
我已经安装并配置了AWS ALB入口控制器(https://github.com/kubernetes-sigs/aws-alb-ingress-controller),它可以通过HTTP正常工作。但是,它不能通过HTTPS解析。 入口资源如下: 我还按照此处的说明添加了自签名SSL证书: https://kubernetes.github.io/ingress-nginx/user-guide/
我正在做一个项目,处理多个fxml和相应的控制器文件。我需要以某种方式从b.fxml的控制器访问定义在例如a.fxml中的fxml元素并使用它。 我不允许展示实际代码。但是,为此目的,我构建了一个简单的应用程序,其中包含两个FXML及其相应的控制器。 此应用程序具有带有ButtonController.java的Button.fxml和带有ProgressIndicator.fxml的Progre
问题内容: 我正在尝试通过AngularJS将URL动态加载到iframe中。由于某种原因,我无法像这个小提琴那样显示。有人可以告诉我我在做什么错吗?为什么不能绑定到控制器中设置的URL?代码很小: 谢谢! 问题答案: 您的代码无法正常工作的原因是因为源不受信任。为了使来源受到信任,您需要使用本文推荐的服务。如果这样做,您将得到以下结果: HTML 控制者 请参阅更新的小提琴:http : //j
问题内容: 我正在尝试使用AJAX将javascript对象(键值对)传递给MVC Controller操作。 控制器操作具有接收对象的Dictionary参数。 当有问题的对象为 空时 (意味着它在javascript中的值为{}),我在调试器中看到以下内容。 为什么控制器和动作名称会自动添加到Dictionary参数中? 使用提琴手,我能够看到正在传递到我的控制器,并且看不到这两个值正在传递.
问题内容: 我为其中一个页面设置了一个版式,然后使用大量的小视图作为种子,这些小视图用于填充日期。我的状态目前看起来像这样: 如您所见,父布局将我的Controller保留在称为 EventCtrl 的页面上。现在,我希望所有视图现在都可以访问此控制器,但事实并非如此。相反,我必须将来自 eventLayout 的主要父模板包装到div中,然后在其中使用旧学校: 我至少想了解为什么会发生这种情况,