java-无法在数据库表中设置值以反映更改
我有一个简单的网页,我可以点击下拉菜单,选择我喜欢的文档版本。文档的每个版本都有自己的文件状态,用活动(1)或过时(2)表示 因此,如果我更改为文档的任何版本,那么我将能够查看该文档的详细信息。文档旁边有一个编辑按钮,该按钮将根据版本的文件状态显示 一次只能激活一个文件。因此,如果有两个版本,版本A和版本B,其中A处于活动状态,则B必须过时。如果我更改为查看版本B(通过下拉),则不应显示编辑按钮 在我的数据库中,我有一个名为java-无法在数据库表中设置值以反映更改,java,java-7,Java,Java 7,我有一个简单的网页,我可以点击下拉菜单,选择我喜欢的文档版本。文档的每个版本都有自己的文件状态,用活动(1)或过时(2)表示 因此,如果我更改为文档的任何版本,那么我将能够查看该文档的详细信息。文档旁边有一个编辑按钮,该按钮将根据版本的文件状态显示 一次只能激活一个文件。因此,如果有两个版本,版本A和版本B,其中A处于活动状态,则B必须过时。如果我更改为查看版本B(通过下拉),则不应显示编辑按钮 在我的数据库中,我有一个名为fstatus的列,由int表示。当它检索文档版本时,它会检查该列的值。
fstatus
的列,由int表示。当它检索文档版本时,它会检查该列的值。如果为1,则显示编辑按钮,否则不显示按钮
我的问题是,当我更改为非活动版本时,我希望将该值设置为与1不同的值,以便它自动删除按钮。我似乎无法让它工作,所以我需要知道我做错了什么
Fmedia.java:有一个getter和setter,用于检索并设置表中列的值
public int getFstatus() {
return fstatus;
}
public void setFstatus(int fstatus) {
this.fstatus = fstatus;
}
File.java:
public Node get_folder(long fileID) {
//this line is not that important
List resList1 = nodeFacade.list_parent(fileID, LinkType.VER_LINKS);
// This retrieves version document that are inactive
if(resList1.size()==1){
// grabs the unique fileID so it knows which row in the table to update the column status
Fmedia fmedia = new Fmedia(fileID);
//set the status column to 2 (initially it's 1)
fmedia.setFstatus(2);
// by changing the value to 2 before retrieving the record,it should be able to retrieve the record now and not display the button.
// returns the records of that inactive version.
return (Node) resList1.get(0);
}
}
我怀疑问题在于行fmedia.setFstatus(2)因为我实际上需要将记录从1更新为2,并且它是表中的一条现有记录。
另外,我运行了一个调试,它能够检索到正确的fileID,但不知何故它无法更新status列,这意味着它仍然是1,这不是我想要的
有没有办法克服这个问题?当您创建:
Fmedia fmedia = new Fmedia(fileID);
fmedia.setFstatus(2);
它创建对象并将值分配给状态,但不会将数据保存/持久化到数据库中
您需要隐式调用它以确保EntityManager保存数据
由于您正在使用:
<groupId>com.htasia</groupId>
<artifactId>PantonMCRE</artifactId>
<version>9.5.0</version>
或使用:
Query createQuery(CriteriaUpdate updateQuery)
例如:
CriteriaUpdate<Fmedia> updateCriteria = builder.createCriteriaUpdate(Fmedia.class);
Root<Fmedia> root = updateCriteria.from(Fmedia.class);
updateCriteria.set(Fmedia.fstatus, 2); // make this public from the model
updateCriteria.where(builder.equal(root.get(Fmedia.nodeid), fileID)); // public instead of private
em.createQuery(updateCriteria).executeUpdate();
criteriaupdatecriteria=builder.createCriteriaUpdate(Fmedia.class);
Root=updateCriteria.from(Fmedia.class);
updateciteria.set(Fmedia.fstatus,2);//从模型中将其公开
其中(builder.equal(root.get(Fmedia.nodeid),fileID));//公共而非私人
em.createQuery(updateLiteria).executeUpdate();
那么您正在File.java中创建一个新的“Fmedia”实例,之后您将如何处理它?--您不需要执行类似于resList.get(0).replaceFmedia(fmedia)的操作吗
?@BookOfZeus我在File.java中创建了实例,然后检索fileID,然后我想将特定列设置为值2,例如。newfmedia(fileID)代码>请发布该项目的代码constructor@BookOfZeus我的错,return
代码应该在循环中。如果我编辑了我的文章,fileID应该是传递函数的参数。
CriteriaUpdate<Fmedia> updateCriteria = builder.createCriteriaUpdate(Fmedia.class);
Root<Fmedia> root = updateCriteria.from(Fmedia.class);
updateCriteria.set(Fmedia.fstatus, 2); // make this public from the model
updateCriteria.where(builder.equal(root.get(Fmedia.nodeid), fileID)); // public instead of private
em.createQuery(updateCriteria).executeUpdate();