我正在尝试为 Hibernate 实现枚举映射。到目前为止,我已经研究了可用的选项,并且@Enumerated(EnumType.ORDINAL)和似乎都@Enumerated(EnumType.STRING)不足以满足我的需求。这@Enumerated(EnumType.ORDINAL)似乎很容易出错,因为仅仅对枚举常量进行重新排序就会搞乱映射,而且这也@Enumerated(EnumType.STRING)不够,因为我使用的数据库已经充满了要映射的值,而这些值并不是什么我希望我的枚举常量被命名为(值是外语字符串/整数)。
目前,所有这些值都被映射到字符串/整数属性。同时,属性应该只允许有限的值集(想象一下meetingStatus属性允许字符串:PLANNED、CANCELED和DONE。或者另一个属性允许有限的整数值集:1、2、3、4、5)。
我的想法是用枚举替换实现以提高代码的类型安全性。String / Integer 实现可能导致错误的一个很好的例子是表示此类值的 String 方法参数 - 使用 String 时,任何内容都会发生。另一方面,拥有 Enum 参数类型会引入编译时安全性。
似乎满足我需求的唯一解决方案是为每个枚举实现javax.persistence.AttributeConverter带有@Converter注释的自定义。由于我的模型需要相当多的枚举,因此为每个枚举编写自定义转换器很快就开始变得疯狂。因此,我寻找问题的通用解决方案 - >如何为任何类型的枚举编写通用转换器。以下答案在这里有很大帮助: https: //stackoverflow.com/a/23564597/7024402。答案中的代码示例提供了某种通用的实现,但对于每个枚举,仍然需要一个单独的转换器类。答案的作者还继续说道:
“另一种方法是定义一个自定义注释,修补 JPA 提供程序以识别该注释。这样,您可以在构建映射信息时检查字段类型,并将必要的枚举类型提供给纯通用转换器。”
这就是我认为我会感兴趣的。不幸的是,我找不到更多关于此的信息,并且我需要更多的指导来了解需要做什么以及它如何与这种方法一起工作。
public interface PersistableEnum<T> {
T getValue();
}
Run Code Online (Sandbox Code Playgroud)
public enum IntegerEnum implements PersistableEnum<Integer> {
ONE(1),
TWO(2),
THREE(3),
FOUR(4),
FIVE(5),
SIX(6);
private int …Run Code Online (Sandbox Code Playgroud) 假设我们有两个组件 -<Parent/>和<Child />,并且子组件必须有条件地渲染。v-if在渲染子元素的父元素中使用与在根元素的子元素中使用它之间有区别吗?
父级进行条件渲染:
<!-- Parent.vue -->
<div>
<Child v-if="displayChild' />
</div>
<!-- Child.vue -->
<div>
...
</div>
Run Code Online (Sandbox Code Playgroud)
孩子做条件渲染:
<!-- Parent.vue -->
<div>
<Child />
</div>
<!-- Child.vue -->
<div v-if="displayChild">
...
</div>
Run Code Online (Sandbox Code Playgroud)
我知道他们实际上做了同样的事情,但是当父级进行条件渲染时,是否有像 vue 这样的东西能够做更多的优化?或者与另一种方式相比,一种方式有其他好处吗?
我想在我的前端项目中nuxtjs一起使用。tailwindcss我已经tailwindcss通过这样的模块集成:
buildModules: [
// Doc: https://github.com/nuxt-community/nuxt-tailwindcss
'@nuxtjs/tailwindcss'
],
Run Code Online (Sandbox Code Playgroud)
现在可以tailwindcss工作了,但是代码完成却不起作用。有两个 Intellij IDEA 插件确实为 tailwind 添加了代码完成 - 但是当我开始自定义文件时,tailwind.config.js它们失败了,因为它们只建议基于默认 tailwind 配置的类(它们无法识别我自己的类,并且它们建议不再可用的类,因为我已通过配置文件删除了它们)。
我可以使用 React 进行非常类似的设置nextjs- 因为这个框架在文件夹中创建了一个输出 css 文件.next,并且 IDEA 可以接收该文件。这启发了我,所以我尝试删除该模块@nuxtjs/tailwindcss,并tailwindcss通过. 即使我在该文件夹中添加了该选项,也没有在该文件夹中创建文件。postcssnuxt.nuxtextractCSS: true
我也想达到nextjs这样的结果nuxtjs。有人有一个优雅的解决方案吗?
PS:我想继续使用 IDEA,并且我想避免每次我的 tailwind 配置更改时通过项目中的控制台手动创建 tailwind 输出。