您可以将 scala 和 java 一起用于您认为最适合的任何事情。
我知道hibernate必须在java中。
这不一定是真的。您可以将 Scala 类用作 Hibernate ORM 对象。您只需要确保编译后的 .class 文件以 Hibernate 期望的相同 getter、setter 和默认构造函数结束。
甚至您的 Web App 模块也可以用 scala 编写。控制器只需要遵守 Spring MVC 所期望的契约。
一般来说,几乎任何用 Java 编写的东西都可以用 scala 重写。当然,也有例外,但不要永远限制自己尝试。假设您现有的代码没有做任何疯狂的事情(即黑魔法反射),它应该没问题。
这里有趣的问题是如何让它与 Maven 一起工作......
有一个现有的 SO question描述了使用maven-scala-plugin来使这种项目工作(具有混合 scala 和 java 资源的多模块)。我要添加到这个解决方案的唯一额外评论是,根据我的经验,我们只能让它与依赖于 java 源的 scala 模块一起工作,而不是相反。这是因为我们的 maven 配置分别使用了 java 编译器和 scala 编译器。理论上,scala 编译器也可以编译 Java 文件,因此如果您将其配置为只使用一个编译器处理所有内容,您将不会遇到此限制。
编辑:
布兰克曼评论道:
@Jesse 所以你也这样做了?不确定我是否理解 Maven 问题。
是的,我参与了几个使用混合 java 和 scala 源的项目。我们没有将 Scala 用于 Hibernate 层,但我们为其他一切使用了。
我描述的 maven 问题是我们的 maven-scala-plugin 配置的结果。您必须对其进行配置才能知道如何编译您的 scala 文件。我们的配置(可能不正确)设置为首先使用 javac 编译 java 文件,然后使用 scalac 编译 scala 文件。这意味着我们不允许编写引用 scala 类的 java 代码,因为它们在编译时不可用。通过正确的配置,应该可以使用 scalac 编译器将所有源代码一起编译,这将消除这个尴尬的限制。我在上面链接的 SO 问题有示例配置以及一些关于我正在谈论的编译时问题的讨论。如果您需要更多关于设置插件的参考,请查看插件的网站(也链接到上面)以获取官方文档。