Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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 我们可以在Hibernate上持久化内部枚举吗?_Java_Mysql_Hibernate_Enums - Fatal编程技术网

Java 我们可以在Hibernate上持久化内部枚举吗?

Java 我们可以在Hibernate上持久化内部枚举吗?,java,mysql,hibernate,enums,Java,Mysql,Hibernate,Enums,我在类“User”中创建了一个内部枚举“UserType”,用于确定用户的实例是基本用户、部门用户、独占用户还是超级用户。下面是一段代码: public class User { private String id, lastName, firstName, middleName, password; private UserType userType; public void setId(String id) { this.id = id; } public void setLa

我在类“User”中创建了一个内部枚举“UserType”,用于确定用户的实例是基本用户、部门用户、独占用户还是超级用户。下面是一段代码:

public class User {

private String id, lastName, firstName, middleName, password;
private UserType userType;

public void setId(String id) {
    this.id = id;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public void setMiddleName(String middleName) {
    this.middleName = middleName;
}

public void setPassword(String password) {
    this.password = Encryption.encrypt(password);
}

public void setUserType(UserType userType) {
    this.userType = userType;
}

public String getId() {
    return id;
}

public String getLastName() {
    return lastName;
}

public String getFirstName() {
    return firstName;
}

public String getMiddleName() {
    return middleName;
}

public String getPassword() {
    return password;
}

public UserType getUserType() {
    return userType;
}   

public enum UserType {

    BASIC, DEPARTMENT_HEAD, SUPERUSER;

}
}

现在,我想使用ORM将实例化的对象保存到我的MySQL数据库中。我正在使用Hibernate。下面是我在类标记中的Hibernate映射文件片段:

<id name="id" type="string" column="id"/>
    <property name="lastName" column="lastName" type="string" not-null="true"/>
    <property name="firstName" column="firstName" type="string"/>
    <property name="middleName" column="middleName" type="string"/>
    <property name="password" column="password" type="string" not-null="true"/>
    <property name="userType" column="userType" not-null="true">
        <type name="org.hibernate.type.EnumType">
            <param name="enumClass">com.fileManagement.dataDesign.User.UserType</param>
            <param name="type">12</param>
            <param name="useNamed">true</param>
        </type>
    </property>
下面是异常堆栈跟踪的片段:

Caused by: org.hibernate.HibernateException: Enum class not found
at org.hibernate.type.EnumType.setParameterValues(EnumType.java:244)
at org.hibernate.type.TypeFactory.injectParameters(TypeFactory.java:131)
at org.hibernate.type.TypeFactory.custom(TypeFactory.java:214)
... 12 more
Caused by: java.lang.ClassNotFoundException: com.fileManagement.dataDesign.User.UserType
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:340)
at org.hibernate.internal.util.ReflectHelper.classForName(ReflectHelper.java:171)
at org.hibernate.type.EnumType.setParameterValues(EnumType.java:241)
... 14 more

我尝试将枚举作为一个外部枚举,它工作得很好,但由于设计的选择,我真的想将它作为一个内部枚举放在“User”类中,因为它只在该类上可用。有可能这样做吗?如果是,如何执行?

如我在评论中所述,请尝试将映射文件中的枚举类声明为:

com.fileManagement.dataDesign.User$UserType


通常,如果我们想访问Hibernate中的任何内部类,那么我们需要使用
$
符号。

尝试将映射中的枚举类声明为
com.fileManagement.dataDesign.User$UserType
,看看这是否有帮助。您在谈论什么设计问题?将UserType文件与User放在同一个包中是一个很好的做法。我不明白将枚举放在其他类中有什么好处。@Chaitanya谢谢。现在它工作得很好。
Caused by: org.hibernate.HibernateException: Enum class not found
at org.hibernate.type.EnumType.setParameterValues(EnumType.java:244)
at org.hibernate.type.TypeFactory.injectParameters(TypeFactory.java:131)
at org.hibernate.type.TypeFactory.custom(TypeFactory.java:214)
... 12 more
Caused by: java.lang.ClassNotFoundException: com.fileManagement.dataDesign.User.UserType
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:340)
at org.hibernate.internal.util.ReflectHelper.classForName(ReflectHelper.java:171)
at org.hibernate.type.EnumType.setParameterValues(EnumType.java:241)
... 14 more