Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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 为什么有些实体拒绝使用名称空间,而属于Empyt名称空间_Java_Google App Engine_Namespaces - Fatal编程技术网

Java 为什么有些实体拒绝使用名称空间,而属于Empyt名称空间

Java 为什么有些实体拒绝使用名称空间,而属于Empyt名称空间,java,google-app-engine,namespaces,Java,Google App Engine,Namespaces,我正在为应用程序使用GAE数据存储 我绝望了。。。我在这里遇到了一个心理障碍,我想不出任何办法来解决这个问题了。我有一个class Teacher.class(及其所有级联),它不会存储在名称空间中。。。所有其他课程(此处未显示,但非常相似)都像一个魔咒一样工作,教师。课堂阅读和写作都非常完美。。。除非它不去其名称空间,否则它总是以空名称空间结束 我将发布这个类,以及数据接口层 @Entity public class Teacher implements Serializable { pr

我正在为应用程序使用GAE数据存储

我绝望了。。。我在这里遇到了一个心理障碍,我想不出任何办法来解决这个问题了。我有一个class Teacher.class(及其所有级联),它不会存储在名称空间中。。。所有其他课程(此处未显示,但非常相似)都像一个魔咒一样工作,教师。课堂阅读和写作都非常完美。。。除非它不去其名称空间,否则它总是以空名称空间结束

我将发布这个类,以及数据接口层

@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);