Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Jpa 数据保留在数据库中,但可以';只有在重新启动服务器时才能访问它们_Jpa - Fatal编程技术网

Jpa 数据保留在数据库中,但可以';只有在重新启动服务器时才能访问它们

Jpa 数据保留在数据库中,但可以';只有在重新启动服务器时才能访问它们,jpa,Jpa,在执行userFacade.create(user)时,我可以看到该用户是在数据库中创建的,但在重新启动应用程序之前,我无法使用该用户登录 或者,如果我未验证该会话(它处于会话范围内) 其他示例:如果我创建了一个Cv并将其添加到用户CVs中,即使它在数据库中,我也无法获取使用user.getListCvs()创建的最后一个Cv,但是如果我重新启动服务器,我可以看到它 这是创建当前用户简历的bean public class CreerCV implements Serializable{ @

在执行
userFacade.create(user)
时,我可以看到该用户是在数据库中创建的,但在重新启动应用程序之前,我无法使用该用户登录 或者,如果我未验证该会话(它处于会话范围内)

其他示例:如果我创建了一个Cv并将其添加到用户CVs中,即使它在数据库中,我也无法获取使用
user.getListCvs()
创建的最后一个Cv,但是如果我重新启动服务器,我可以看到它

这是创建当前用户简历的bean

public class CreerCV implements Serializable{
  @EJB 
  private CvFacade cvFacade;
  @EJB 
  CandidatFacade candidatFacade;
  private Cv cv;
  private Candidat candidat;

  @PostConstruct
  public void init(){
    
    cv=new Cv();
 
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
    candidat=(Candidat)session.getAttribute("membre");
    candidat=candidatFacade.find(candidat.getId()); //so i can not get the listCVs of the my saved attribute in my session , but the listCVs of a user in the database ! This is the problem
}
//+getters and setters

public String creerCV(){
    if(candidat!=null){
        cv.setCandidat(candidat);
        candidat.getListeCv().add(cv);
        try{
            cvFacade.create(cv);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Création du cv avec succés"));
        }catch(Exception e) {
            System.out.println(e);
        }
    }
    else
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Une erreur s'est produite",""));
return "/index.xhtml";
}
@Named
@RequestScoped
public class ListeCvs implements Serializable{
@EJB
private CvFacade cvFacade;

private List<Cv> listeCvs=new ArrayList<>();
private Cv selectedCv;
private Candidat candidat;


@PostConstruct
public void init(){
    
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
    candidat=(Candidat)session.getAttribute("membre"); 
    System.out.println(candidat.getListeCv());
    if(candidat!=null)
    listeCvs=candidat.getListeCv();
    candidat=candidatFacade.find(candidat.getId());
}
//getters+setters ect..
这是显示当前用户CV的bean

public class CreerCV implements Serializable{
  @EJB 
  private CvFacade cvFacade;
  @EJB 
  CandidatFacade candidatFacade;
  private Cv cv;
  private Candidat candidat;

  @PostConstruct
  public void init(){
    
    cv=new Cv();
 
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
    candidat=(Candidat)session.getAttribute("membre");
    candidat=candidatFacade.find(candidat.getId()); //so i can not get the listCVs of the my saved attribute in my session , but the listCVs of a user in the database ! This is the problem
}
//+getters and setters

public String creerCV(){
    if(candidat!=null){
        cv.setCandidat(candidat);
        candidat.getListeCv().add(cv);
        try{
            cvFacade.create(cv);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Création du cv avec succés"));
        }catch(Exception e) {
            System.out.println(e);
        }
    }
    else
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Une erreur s'est produite",""));
return "/index.xhtml";
}
@Named
@RequestScoped
public class ListeCvs implements Serializable{
@EJB
private CvFacade cvFacade;

private List<Cv> listeCvs=new ArrayList<>();
private Cv selectedCv;
private Candidat candidat;


@PostConstruct
public void init(){
    
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
    candidat=(Candidat)session.getAttribute("membre"); 
    System.out.println(candidat.getListeCv());
    if(candidat!=null)
    listeCvs=candidat.getListeCv();
    candidat=candidatFacade.find(candidat.getId());
}
//getters+setters ect..
@Named
@请求范围
公共类ListCVS实现可序列化{
@EJB
私人立面;
private List listcvs=new ArrayList();
私人简历选择简历;
私人候选人;
@施工后
公共void init(){
HttpSession会话=(HttpSession)FacesContext.getCurrentInstance().getExternalContext().getSession(false);
candidate=(candidate)session.getAttribute(“membre”);
System.out.println(candidate.getlistcv());
if(候选!=null)
listcvs=candidate.getlistcv();
candidate=candidatefacade.find(candidate.getId());
}
//接受者+接受者等。。
示例:

我创建了一个cv,我刷新了我在表格中看不到创建的cv! 我去了数据库,我可以看到它被创建了 我重新启动我的应用程序,我去我的表格,我可以在表格中看到我的简历

我创建了第二个cv,我无法在表中看到它,但我可以看到我创建的前一个cv,我看到它是在数据库中创建的,我重新启动我的应用程序转到我的表,我可以在那里看到我的两个cv


PS:对于测试,我使用
System.out.print
和一些
dataTables
查看列表

如何保存简历?它们是否由两个不同的实体经理保存和检索

如果是这样,请检查关于第一级缓存和刷新的信息


您如何处理事务?如果您创建了一个事务,您是否记得提交刷新

  • 请记住,如果您使用不同的EntityManager进行保存和检索,它们将看不到更改
  • 处理好您的事务,并确保在您尝试查找简历和用户之前将其保存到数据库中
  • 编辑:

    因此,当您使用find函数时,您将收到类型完全不同的candidate对象,并且当您运行此部分时:

    cv.setCandidat(candidat);
    candidat.getListeCv().add(cv);
    
    它适用于不同的“候选对象”,因为这行:

    candidat=candidatFacade.find(candidat.getId());
    
    如果您想在候选对象中保留每个包含最新数据的组件,只需在会话传递的该对象上编辑它们即可。使用“查找”功能时,您会收到新对象,并且每个组件都有过时的数据。 尝试从组件中删除此项

    EDIT2:

    事情是这样的。您从会话中检索候选人,我们称之为A。 你在CreerCV和ListCV中检索它。是的,它是同一个对象

    然后您使用在CreerCV中查找并接收不同的类候选实例。我们将其称为B

    然后使用“在ListCV中查找”并接收不同的类候选实例。我们将其称为C

    现在对象B和C有相同的数据,但它们是java的不同对象


    您在对象B中添加了一些内容到列表中,并希望看到对象C在列表中的此更改。

    我添加了控件CV和用户,正如我在问题中所说,都保存在数据库中!但当我执行getListCv时,它不起作用当我执行Candidate=session.getAttrib…,它没有收到相同的对象?因此在此之后,如果我确实找到(candidate.id)它将检索数据库中的同一个对象,我可以看到以前的结果,但看不到我添加的结果检查我的示例,我再次编辑了我的帖子我的意思是。你得到的对象A与对象B的数据完全相同(当你运行两个查找时会发生这种情况)然后在对象A的列表中添加一些内容,当然在对象B中看不到这种变化。它们是两个不同的对象。Salter帐户?我一直在帮助@Sarah