Java 如何使用JPA2、Hibernate 3.5处理选择字段
我有一个具有整数属性的实体,在proto代码中如下所示: 也许这个解决方案更可行:Java 如何使用JPA2、Hibernate 3.5处理选择字段,java,hibernate,orm,data-modeling,jpa-2.0,Java,Hibernate,Orm,Data Modeling,Jpa 2.0,我有一个具有整数属性的实体,在proto代码中如下所示: 也许这个解决方案更可行: class MyEntity: String name final static private Something? frequencyChoices = {1000, 2000, 3000}, {"BSD", "Apache", "GPL"} Integer frequency final static private String[] typeChoices = new
class MyEntity:
String name
final static private Something? frequencyChoices = {1000, 2000, 3000}, {"BSD", "Apache", "GPL"}
Integer frequency
final static private String[] typeChoices = new String[] {"BSD", "Apache", "GPL"}
Integer type
@Choices(MyEntity.frequencyChoices)
String getFrequency()
return frequency)
@IntervalChoices(MyEntity.typeChoices)
String getType()
return type
*get**访问器根据此表返回字符串
value(type) HumanReadableString(type)
1 BSD
2 Apache
3 GPL
min frequency max frequency HumanReadableString(frequency)
0 1000 rare
1000 2000 frequent
2001 3000 sexy
应该可以获取属性可以采用的所有可能值,例如:
getChoices(MyEntity, "type") returns ("rare", "frequent", "sexy")
应该可以从字符串中获取绑定值:
getValue(MyEntity, "frequency", "sexy") returns (2000,3000)
编辑:所有这些的目的此方法应简化表单和请求的生成(当然这不应受视图实现的限制)
编辑:添加了我想告诉Java一些属性是特殊的,这样它就可以相应地生成get*访问器
编辑:添加了如何在代码中提交选项
编辑:我在数据库中存储的唯一内容是整数,当我要打印它们时,它们应该以某种方式转换为人类可读的字符串。您可以在枚举中获得其他信息:
public enum License {
GPL("GPL"),
APACHE("Apache License");
public License(String displayName) {
this.displayName=displayName;
}
String displayName;
}
根据需要添加其他函数,但仔细查看枚举类已经提供了哪些函数。您可以轻松地完成此操作(但请注意,数据库中的值将是枚举的
ordinal()
值。因此:
public enum License { GPL, APACHE, BSD }
频率选择
可以进入@element集合
如果您需要人类可读的值,您可能希望将枚举转换为普通类,并将其作为一个单独的表持久化,以便可以更轻松地将新许可证添加到列表中
@Entity
public class License {
@Id long id;
String name;
}
我没有试图坚持这一点,但你可以尝试以下
我会坚持使用枚举。您可以更改什么?您可以使用枚举吗?哪些部分必须是动态的?哪些部分存储在数据库中?我不知道动态Java是否存在,我将添加一些关于如何编写的信息。也许枚举很好,但我应该如何使用它们?我不是指动态Java,我是指动态值(例如,无需重新编译代码即可添加新许可证)。
@Entity
public class License {
@Id long id;
String name;
}