Java 为什么有些实体拒绝使用名称空间,而属于Empyt名称空间
我正在为应用程序使用GAE数据存储 我绝望了。。。我在这里遇到了一个心理障碍,我想不出任何办法来解决这个问题了。我有一个class Teacher.class(及其所有级联),它不会存储在名称空间中。。。所有其他课程(此处未显示,但非常相似)都像一个魔咒一样工作,教师。课堂阅读和写作都非常完美。。。除非它不去其名称空间,否则它总是以空名称空间结束 我将发布这个类,以及数据接口层Java 为什么有些实体拒绝使用名称空间,而属于Empyt名称空间,java,google-app-engine,namespaces,Java,Google App Engine,Namespaces,我正在为应用程序使用GAE数据存储 我绝望了。。。我在这里遇到了一个心理障碍,我想不出任何办法来解决这个问题了。我有一个class Teacher.class(及其所有级联),它不会存储在名称空间中。。。所有其他课程(此处未显示,但非常相似)都像一个魔咒一样工作,教师。课堂阅读和写作都非常完美。。。除非它不去其名称空间,否则它总是以空名称空间结束 我将发布这个类,以及数据接口层 @Entity public class Teacher implements Serializable { pr
@Entity
public class Teacher implements Serializable
{
private static final long serialVersionUID = 5426530769458891752L;
@Id
private Key key;
private long KID;
private long school;
private String FName;
private String LName;
private String Email;
private String SchoolName;
@OneToOne(cascade = CascadeType.ALL,fetch=FetchType.LAZY)
private Transcript Transcript; // Contains further @OneToMany Relations and Constructors
@OneToOne(cascade = CascadeType.ALL,fetch=FetchType.LAZY)
private TeacherInfo teacherInf; // Contains Only Primitive Type Objects(not important)
private Boolean ActiveUser = false;
private List<Key> WorkshopsAttended;
private List<Key> WorkshopsRegistered;
public Teacher()//Constructor
{
if(this.KID == 00)
{
this.KID = TeacherUtils.genKID();//Returns a sequence and date and location based long
this.key = KeyFactory.createKey(Teacher.class.getSimpleName(), this.KID);
this.Transcript = new Transcript();
this.teacherInf = new TeacherInfo();
}
if(this.WorkshopsAttended == null)
{
this.WorkshopsAttended = new ArrayList<Key>();
}
if(this.WorkshopsRegistered == null)
{
this.WorkshopsRegistered = new ArrayList<Key>();
}
} //End of Constructor
//Getters and Setters
}
最后是数据接口层(这是一个很长的文件,我不能把它全部放在这里,所以我将粘贴与持久化教师实体有关的位)
业务逻辑层中的一个典型示例是
Teacher teacher = new Teacher();
teacher.setFName("John");
teacher.setLName("Smith");
teacher.setEmail("xyz@xyz.com");
TeacherUtils.SaveTeacher(teacher);
我要感谢每一个试图研究这个问题的人!原来Teacher.class构造函数逻辑有问题,导致名称空间发生了更改,而没有将其恢复到以前的状态(ID生成器函数)。现在我处理好了,一切都很好!!我想这只是其中的一天 再次非常感谢,我将留下这个代码作为模板,以防有人需要它
public class TeacherUtils
{
private static final String ActiveNamespace = SystemSettings.TeacherActive;
private static final String DeletedNamespace = SystemSettings.TeacherDeleted;
private static final boolean NSFlag = (SystemSettings.UseNameSpace & SystemSettings.TeacherNameSpace);
public synchronized static void SaveTeacher(Teacher teacher)
{
EntityManager em = getActiveEM();
em.persist(teacher);
em.flush();
closeEM(em);
}// End of SaveTeacher
public synchronized static void UpdateTeacher(Teacher teacher)
{
EntityManager em = getActiveEM();
em.merge(teacher);
em.flush();
closeEM(em);
}// End of Update Teacher
private synchronized static EntityManager getActiveEM()
{
EntityManager em;
try
{
if( (!NamespaceManager.get().equals(ActiveNamespace)) && TeacherUtils.NSFlag)
{
setNamespace();
}
}
finally
{
em = EMF.get().createEntityManager();
em.getTransaction().begin();
}
return em;
} // End of getAciveEM();
private synchronized static void closeEM(EntityManager em)
{
em.getTransaction().commit();
em.close();
NamespaceManager.set("");
while(!NamespaceManager.get().equals(""))
{}
return;
}// End of CloseEM(em)
private synchronized static void setNamespace()
{
if(TeacherUtils.NSFlag)
{
NamespaceManager.set(TeacherUtils.ActiveNamespace);
while(!NamespaceManager.get().equals(TeacherUtils.ActiveNamespace))
{}
}
}// End of setNamespace
Teacher teacher = new Teacher();
teacher.setFName("John");
teacher.setLName("Smith");
teacher.setEmail("xyz@xyz.com");
TeacherUtils.SaveTeacher(teacher);