我正在开发一个应用程序,它使用通过其添加到历史记录中的视图
history.pushState() 功能
视图是表单中的不同步骤,其中用户意图能够返回到先前步骤并进行调整但不转发而不重新发布.
我通过监听popstate事件并在调用的函数中向后导航一步来实现后向导航
问题是,当popstate被调用时,浏览器中的历史记录变得可点击,原因很明显.但是,由于历史转发按钮也会触发一个popstate事件,因此向前点击历史记录的结果是您向后退一步.
由于我不希望用户能够向前推进历史记录,因此我希望清除前向历史记录.
所以我的问题基本上是,当您退回浏览器历史记录时,有没有办法删除前进历史记录?
我正在使用 springJunit4runner 运行 spring + hibernate + JUnit 并将事务设置为默认回滚 我使用内存中的 derbydb 作为数据库。Hibernate 用作 JPA 提供程序,我正在成功测试 CRUD 类型的东西。但是,我对 JPA 和 @GenerateValue 的行为有疑问
如果我单独运行其中一个测试,则两个实体的 id 为 1 和 2。如果我运行整个测试套件,则 id 为 6 和 7。Spring 可以很好地进行回滚,因此数据库中只有这两个实体加法之后,当然之前为零。但是 @GenerateValue 的行为不允许我可靠地 findById 除非我从
dao.add(Entity e) //method
Run Code Online (Sandbox Code Playgroud)
我不想为了测试而这样做,或者返回被持久化的实体是一个很好的做法,所以我无论如何都应该这样做?
我想执行以下查询来有条件地删除临时表。
String dropSql = "BEGIN EXECUTE IMMEDIATE 'DROP TABLE " + tmpTblName + "';" +
" EXCEPTION" +
" WHEN OTHERS THEN" +
" IF SQLCODE!=-942 THEN" +
" RAISE;" +
" END IF;" +
" END";
Run Code Online (Sandbox Code Playgroud)
然后将其作为本机查询执行,如下所示:
JPA.em().createNativeQuery(dropSql)
.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
但是,JPA 不会让我这样做,或者更确切地说,oracle db 不会。显然;以某种方式逃避或误解。
Caused by: java.sql.SQLException: ORA-06550: line 1, column 120:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
; <an identifier> <a double-quoted delimited-identifier>
The symbol ";" was substituted for "end-of-file" to continue.
Run Code Online (Sandbox Code Playgroud)
我是否必须忍受使用单独的查询来实现我的目标,还是有一些技巧?
我有这个测试设置,我使用 spring、derby 和 JPA,我想测试更新是否有效。
也就是说,我真的无法以标准方式做到这一点。创建一个实体对象,持久化,再次查找对象,更改对象中的某些字段,再次持久化,查找是否已更改。
这种方法的问题是我没有得到该实体的新实例。它总是一样的。所以我无法真正判断更新是否正常工作,因为我总是更改同一个对象,因此任何更改都会过早地反映出来。
如果我对某个对象进行更改而不将其与 persistencecontext 合并,然后尝试对该对象进行查找,则更改已存在于查找中,因为它始终处理同一对象。
有什么方法可以让我失去上下文并进行真正的测试以确保更新正常工作?
这是我当前的代码:
@Test
public void canUpdate() {
JsonTestEntity entity1 = new JsonTestEntity();
JsonTestEntity entity2 = new JsonTestEntity();
String message = "OmegaCV1";
String message2 = "OmegaCV2";
entity1.setMessage(message);
entity2.setMessage(message2);
em.persist(entity1);
em.persist(entity2);
em.flush();
JsonTestEntity jsonTestEntity = em.find(JsonTestEntity.class, entity2.getId());
assertNotNull("Could not find persisted entity", jsonTestEntity);
assertEquals("Was not same entity", message2, jsonTestEntity.getMessage());
String changeMessage = "Changed message";
jsonTestEntity.setMessage(changeMessage);
JsonTestEntity unChangedEntity = em.find(JsonTestEntity.class, entity2.getId());
assertEquals("Message was prematurely changed", message2, unChangedEntity.getMessage());
em.merge(jsonTestEntity);
JsonTestEntity changedEntity = em.find(JsonTestEntity.class, entity2.getId());
assertEquals("Message …Run Code Online (Sandbox Code Playgroud) 我意识到这应该是非常基本的,但我还没有在Helloworld之后找到第二步
所以我拥有的是:
spring config xml名为spring-beans.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:annotation-config />
<context:component-scan base-package="org" />
</beans>
Run Code Online (Sandbox Code Playgroud)
弹簧上下文初始化类:
public static void main(String[] args) {
// initialize Spring
ApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring-beans.xml");
App app = (App) context.getBean("app");
app.run();
}
Run Code Online (Sandbox Code Playgroud)
AppImpl类的相关细节:
@Component("app")
public final class AppImpl implements App{
// focus of question: This autowiring works
@Autowired
private DAO1 dao1;
public void run() {
//focus of question: This works as daoclass is instantiated properly
obj1s = dao1.myFind();
badJobs = runJobs(obj1s); …Run Code Online (Sandbox Code Playgroud)