在JPA中有一种方法可以在Entity类中映射枚举的集合吗?或者唯一的解决方案是使用另一个域类包装Enum并使用它来映射集合?
@Entity
public class Person {
public enum InterestsEnum {Books, Sport, etc... }
//@???
Collection<InterestsEnum> interests;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Hibernate JPA实现,但当然更喜欢实现不可知的解决方案.
我想将这个c#权限模块移植到java,但是当我无法将数值保存在数据库中然后将其转换为枚举表示时,我很困惑.
在c#中,我创建了一个这样的枚举:
public enum ArticlePermission
{
CanRead = 1,
CanWrite = 2,
CanDelete = 4,
CanMove = 16
}
Run Code Online (Sandbox Code Playgroud)
然后我可以创建一个权限集,如:
ArticlePermission johnsArticlePermission = ArticlePermission.CanRead | ArticlePermission.CanMove;
Run Code Online (Sandbox Code Playgroud)
然后我使用以下方法将其保存到数据库中
(int)johnsArticlePermission
Run Code Online (Sandbox Code Playgroud)
现在我可以将它作为整数/长整数从数据库中读出来,然后将其转换为:
johnsArticlePermission = (ArticlePermission) dr["articlePermissions"];
Run Code Online (Sandbox Code Playgroud)
我可以检查权限,如:
if(johnsArticlePermission & ArticlePermission.CanRead == ArticlePermission.CanRead)
{
}
Run Code Online (Sandbox Code Playgroud)
我怎么能在java中这样做?根据我的理解,在java中,您可以将枚举转换为数值,然后将其转换回java枚举.
想法?
heyhey,只是对bitmasks有疑问.我想我现在知道它们是什么以及它们可以在哪里使用.我想存储特定权限,如BUILD,BREAK和INTERACT,以及更多特定群组.下面的代码应该这样做但我不太确定这是否是正确的"风格".
这个想法是在这里使用前3位来存储第一组的权限,然后使用接下来的三位用于第二组,依此类推.所以现在我的问题是这是一种好方法还是更好的方法?
public class Test {
private int permissions = 0;
/**
* The amount of permissions, currently: {@link #BREAK}, {@link #BUILD}, {@link #INTERACT}
*/
private static final int PERMISSIONS = 3;
/**
* The different permissions
*/
public static final int BUILD = 1, BREAK = 2, INTERACT = 4;
/**
* The different groups
*/
public static final int ALLIANCE = 0, OUTSIDERS = 1;
public void setPermissions(int permissions, int group)
{
this.permissions = permissions << group * …Run Code Online (Sandbox Code Playgroud) Java是否允许类似于好的C或甚至C#这样的意思,你可以定义一个枚举,其中的字段会自动增长,并从一个可选的给定值开始?
例如
在C或C#中:
enum Foo { A = 10, B, C, D = 5000, E, Fish };
Run Code Online (Sandbox Code Playgroud)
产率A = 10,B = 11,C = 12,D = 5000,E = 5001,鱼= 5002.
我有一个彩色枚举
public enum color { GREEN, WHITE, RED }
Run Code Online (Sandbox Code Playgroud)
我有包含它的MyEntity.
public class MyEntity {
private Set<Color> colors;
...
Run Code Online (Sandbox Code Playgroud)
我已经有一个UserType来映射我的枚举.
你知道如何在Hibernate hbm.xml中映射一组枚举吗?
我需要UserType还是最简单的方法?
谢谢
编辑:请注意,我正在寻找hbm.xml配置而不是@CollectionOfElements Annotation
在Scala 2.7中,Enumeration提供Set32/Set64来构建枚举集,并轻松获取Long/Int中的按位值,或者从Long/Int值(简化数据库存储)中构建枚举值.Scala 2.8删除了这些类.2.8 lib中有替代品吗?
我正在寻找一种有效的方法来坚持一周的日子.换句话说,用户将从工作日列表中选择任意天数.具体日期无关紧要,只是一周中的某一天.我需要将这一天存储在一个休眠实体中.
我可以存储其中一个:
Set<DayOfWeek>
Set<Integer>
Run Code Online (Sandbox Code Playgroud)
但我认为它可能比这更简单.如果我只使用单个int来存储数据并使用按位运算,该怎么办?例如:
Sun = 1
Mon = 2
Tue = 4
Wed = 8
Thu = 16
Fri = 32
Sat = 64
Run Code Online (Sandbox Code Playgroud)
因此,为了表示太阳,周一,周三,周六的集合,我将保持整数75.这是因为1 + 2 + 8 + 64 = 75.
我担心的是对这样的字段执行查询.我能找到所有选择了Wed的实体吗?
这看起来像是一个好方法吗?有没有人有更好的主意?
谢谢!