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
查看列表如何保存简历?它们是否由两个不同的实体经理保存和检索
如果是这样,请检查关于第一级缓存和刷新的信息
您如何处理事务?如果您创建了一个事务,您是否记得提交和刷新
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