我正在开发一个抽象模型来表示基于事件注册的各种复杂业务流程。为此,我希望能够使用最新版本的Hibernate来持久保存Java8 Function对象,例如
@Entity
public class Foo {
private Runnable onUpdate = () -> System.out.println("worked");
private java.util.function.Function<String, String> identity = s -> s;
// imagine bean-compliant getter and setter
}
持久方法引用不是一个选项,因为在设置回调之前运行时的部分方法应用是必需的。
只是尝试上面的代码会导致以下异常:
org.hibernate.MappingException: Could not determine type for: java.lang.Runnable ...
有没有办法保留与Runnable
等固定功能接口匹配的函数对象?如果没有,有哪些替代策略可用?
关于XY问题的编辑:
我希望能够将对象中的方法与一些hibernate实体相关联
在运行时期间PostUpdate callback,同时让用户提供hibernate回调无法提供的所有参数。例如,我有一个实体@Entity public class Bar
和另一个带有方法void foo(Bar new, int i)
的控制器类。现在,每次在数据库中更新Bar
的特定实例时,我希望它使用更新的对象和参数foo
来调用i
,该参数由用户在当前指定或者将foo-Event
与Bar
实例相关联的某个先前运行时。
最重要的是,我想使用Hibernate 持久化这个运行时关联,保持对方法的引用,方法所属的对象以及关联期间提供的所有参数。然后,在服务器启动时,只要加载控制器对象,它就会监听对实体实例所做的更改。
答案 0 :(得分:2)
不幸的是,在当前版本的Hibernate中,不可能将Java 8函数存储在数据库中。 Lambdas没有实现Serializable
,也没有办法让他们这样做。