Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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

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
Mysql JPA缓存数据库结果,需要;“联合国缓存”;_Mysql_Jpa - Fatal编程技术网

Mysql JPA缓存数据库结果,需要;“联合国缓存”;

Mysql JPA缓存数据库结果,需要;“联合国缓存”;,mysql,jpa,Mysql,Jpa,我看到了数据库(MySQL 5)记录的“缓存”行为。我似乎看不到新的数据应用程序端没有登录/注销或重新启动应用程序服务器(Glassfish 3)。这是应用程序中唯一一个db记录被“卡住”的地方。我猜我缺少了JPA持久性 我曾尝试手动更改数据库记录,但仍然有某种缓存机制“帮助”我 这是保存新数据的editFile()方法 触发此命令后,我看到数据库中的数据按预期更新 此.file是视图用于显示文件数据的类级属性。它显示了旧数据。在使用filesListsetter:this.setFilesL

我看到了数据库(MySQL 5)记录的“缓存”行为。我似乎看不到新的数据应用程序端没有登录/注销或重新启动应用程序服务器(Glassfish 3)。这是应用程序中唯一一个db记录被“卡住”的地方。我猜我缺少了JPA持久性

我曾尝试手动更改数据库记录,但仍然有某种缓存机制“帮助”我

这是保存新数据的
editFile()
方法

  • 触发此命令后,我看到数据库中的数据按预期更新
  • 此.file
    是视图用于显示文件数据的类级属性。它显示了旧数据。在使用
    filesList
    setter:
    this.setFilesList(newFiles)启动
    UPDATE
    查询后,我尝试将db数据移回数据库中
  • 但当应用程序将其读回时,GlassFish似乎会重新发送对该数据和旧数据的请求

文件目录

public int updateFilesToCategoriesRecords(int fileId, int keywordID){
    Query q = this.em.createNativeQuery("UPDATE files_to_categories set categories = ?1 where file1 = ?2");
    q.setParameter(1, keywordID);
    q.setParameter(2, fileId);
    return q.executeUpdate();
}
如何取消缓存


再次感谢您的关注。

我不认为缓存是问题所在,我认为这是事务

em.getTransaction().begin(); 
Query q = this.em.createNativeQuery("UPDATE file1 set title = ?1, title_friendly = ?2 where file_id = ?3");
        q.setParameter(1, title);
        q.setParameter(2, title_titleFriendly);
        q.setParameter(3, fileID);
        result = q.executeUpdate();
em.getTransaction().commit();
我建议用事务将您的文字保存到DB,以使其持久化。除非您提交请求,否则请求可能会返回没有更改的结果

好的,JTA负责事务管理

当您使用JPA时,为什么要这样做

public int updateFileRecord(File1 file){
    String title = file.getTitle();
    String title_titleFriendly = file.getTitle_friendly();
    int fileID = file.getFileId();
    int result = 0;      
    Query q = this.em.createNativeQuery("UPDATE file1 set title = ?1, title_friendly = ?2 where file_id = ?3");
    q.setParameter(1, title);
    q.setParameter(2, title_titleFriendly);
    q.setParameter(3, fileID);
    result = q.executeUpdate();
    return result; 
}
这应该可以工作并更新JPA附带的内部状态

public int updateFileRecord(File1 file){
  em.persist(file);
}

@丹尼尔&@Tiny让我继续这一次,再次感谢各位

  • 我想指出的是,我在Entity Manager类中使用了
    .merge()
    方法

  • 重要的是要注意,对于
    .merge()
    更新记录,而不是插入一个新记录;您提交给
    .merge()
    的对象必须包含数据库表中字段的所有属性(DAO知道这些属性),否则您将插入新的数据库记录



您好@daniel谢谢您的帮助,我尝试过像这样包装那些Facade方法(),但是我得到了一个
JTA
错误(在这个要点的底部)。好的,对不起,没有阅读全部代码,在JAVA中,容器也可以处理您的事务。这叫做JTA,所以你不能按我的建议去做。这只是第一个猜测。但我有另一个建议啊,丹尼尔,这很好!我现在正在努力。不知道em.persist()
!感谢您用实体管理器@Tiny为我指明了正确的方向,它是
.merge()
谢谢各位。您正在将本机SQL语句直接发送到后端数据库。使用相应的
EntityManager
方法,例如
EntityManager#merge(entity)
EntityManager#persist(entity)
EntityManager#remove(entity)
,尝试同样的方法。在editFile方法中,您可以执行
File1 thisFile=newfile1();setFileId(Integer.parseInt(params.get(“重新加载表单:fileID”)),但使用JPA时应该执行以下操作:
file1thisfile=em.find(File1.class,Integer.parseInt(params.get(“重新加载表单:fileID”))
从JPA获取文件及其所有依赖项和预定义字段。
public int updateFileRecord(File1 file){
    String title = file.getTitle();
    String title_titleFriendly = file.getTitle_friendly();
    int fileID = file.getFileId();
    int result = 0;      
    Query q = this.em.createNativeQuery("UPDATE file1 set title = ?1, title_friendly = ?2 where file_id = ?3");
    q.setParameter(1, title);
    q.setParameter(2, title_titleFriendly);
    q.setParameter(3, fileID);
    result = q.executeUpdate();
    return result; 
}
public int updateFileRecord(File1 file){
  em.persist(file);
}
public void updateFileRecord(File1 file){
  em.merge(file);
}