Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JPA2、Hibernate 3.5处理选择字段_Java_Hibernate_Orm_Data Modeling_Jpa 2.0 - Fatal编程技术网

Java 如何使用JPA2、Hibernate 3.5处理选择字段

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

我有一个具有整数属性的实体,在proto代码中如下所示:

也许这个解决方案更可行:

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;
}