小编pus*_*shy的帖子

TransactionRequiredException:执行更新/删除查询

我很难找到问题的解决方案.
我有一个服务类,其中包含一个在登录时设置验证标志的方法.

@Service("userRolesService")
@Repository
@Transactional
public class UserRolesService {
   public void verify() {
       repository.verifyUser();
   }
}
Run Code Online (Sandbox Code Playgroud)

我的存储库是一个SpringData CrudRepository,而verifyUser就是这样的

 @Modifying
 @Query("UPDATE user SET (verified = 1 WHERE verified=0)")
 public void verifyUser();
Run Code Online (Sandbox Code Playgroud)

在单元测试中直接调用代码时,一切正常.通过应用程序从我的身份验证提供程序调用它时,我得到以下异常:

javax.persistence.TransactionRequiredException:执行更新/删除查询

使用@Autowired注释将Service类注入到我的单元测试和身份验证提供程序中.测试本身没有任何有趣的注释本身,认证提供者也没有.

我是新鲜的想法,所以如果有人有线索,我会非常感激.

编辑:我现在检索所有未验证的用户,设置验证标志并使用存储库的save()方法,而不是调用verifyUser更新脚本.这有效,但非常难看,所以我愿意接受更好的建议.

EDIT2:

这里的每个请求是配置的持久性部分,我想这是最相关的,其余只处理身份验证.此配置用于单元测试和Web应用程序,唯一的区别是数据源是嵌入式H2 DB用于单元测试,而mysql用于Web应用程序.

<beans [..]>

    <bean id="entityManagerFactory"
          class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
          depends-on="persistenceInitializer">
        <property name="dataSource" ref="dataSource"/>
        <property name="persistenceUnitName" value="jpa"/>
        <property name="packagesToScan">
            <list>
                <value>com.example.model</value>
            </list>
        </property>
        <property name="jpaVendorAdapter">
            <bean class="com.example.persistence.adapter.ConfigurationRetainingHibernateJpaVendorAdapter">
                <property name="database" value="${spring.hibernate.database}"/>
                <property name="generateDdl" value="${spring.hibernate.generateDdl}"/>
            </bean>
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.DefaultComponentSafeNamingStrategy
                </prop>
            </props>
        </property>
    </bean> …
Run Code Online (Sandbox Code Playgroud)

hibernate jpa spring-mvc

11
推荐指数
2
解决办法
4万
查看次数

为当前日期创建查询匹配

可能重复:
在JPA查询中使用CURRENT_DATE的示例

我试图向我的存储库添加一个查询,以比较存储在数据库中的日期与当前日期.

我的查询是这样的:

@Query("Select c from Customer c where c.terminated != 1 or c.terminationDate > <currentDate>")
public List<Customer> getTerminatedCustomers();
Run Code Online (Sandbox Code Playgroud)

我可以插入<currentDate>什么?

如果一切都失败了,我可以在方法中添加一个参数,并将当前日期传递给查询.但如果可能的话,我宁愿选择更优雅的解决方案.

jpa spring-data spring-data-jpa

7
推荐指数
1
解决办法
2万
查看次数

Guice和JSR-330

JSR-330根据包指定了某些命名约定,例如:

javax.inject.Inject
javax.inject.Scope
Run Code Online (Sandbox Code Playgroud)

Guice是JSR-330的参考实现.但是,在使用它时,您会注意到它不符合规范.例如:

com.google.inject.Inject
com.google.inject.Scope
Run Code Online (Sandbox Code Playgroud)

到目前为止我看到的任何参考实现都没有发生这种情况.是什么让Google Guice如此特别,以至于他们可以忽略他们正在实施的规范?

java dependency-injection guice jsr330

6
推荐指数
1
解决办法
1155
查看次数

是否可以使用Servlet实现任何功能,而不是使用JSP实现,反之亦然

我们知道JSP被转换为Servlets,Servlet用于Buisines逻辑,JSP用于视图等.但从理论上讲,您可以使用servlet完成JSP所做的大部分工作.反之亦然.

有没有什么可以用Servlet实现而不用JSP实现,反之亦然?

我在一次采访中得到了这个问题,但是经过大量的谷歌搜索没有找到任何答案.

java jsp servlets java-ee

5
推荐指数
1
解决办法
770
查看次数

java中静态方法覆盖的奇怪情况

它写在任何地方都不能覆盖静态方法,但是当我尝试减少访问说明符时,从public到protected,它会产生错误.例如

public class StaticOverrideFunda {

    public static void foo(){
        System.out.println("Parent Foo");
    }
}

public class B extends StaticOverrideFunda{


    protected static void foo(){
        System.out.println("Child Foo");
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        B.foo();            
    }
}
Run Code Online (Sandbox Code Playgroud)

它说

无法降低继承方法的可见性

因此,它是遵循最重要的规则,为什么我们说foo没有在B类中被覆盖?为什么我们说它隐藏/阴影而不是覆盖?

java overriding

3
推荐指数
1
解决办法
344
查看次数

Solaris 10中的Java启动非常慢

我们的solaris机器出了问题,因为Java需要很长时间才能启动.即使是像java -version这样简单的东西

>time java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Server VM (build 16.3-b01, mixed mode)

real    0m34.084s
user    0m0.088s
sys     0m8.331s
Run Code Online (Sandbox Code Playgroud)

有趣的是,这仅限于Java6:

java version "1.5.0_24"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_24-b02)
Java HotSpot(TM) Server VM (build 1.5.0_24-b02, mixed mode)

real    0m0.320s
user    0m0.123s
sys     0m0.138s
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

java solaris

2
推荐指数
1
解决办法
2801
查看次数

Java的.正则表达式.如何解析?

作为输入参数,我可以有两种类型的String:

codeName=SomeCodeName&codeValue=SomeCodeValue
Run Code Online (Sandbox Code Playgroud)

要么

codeName=SomeCodeName 
Run Code Online (Sandbox Code Playgroud)

没有codeValue.

codeName并且codeValue是关键.

如何使用正则表达式返回键的值?在这个例子中它只返回SomeCodeNameSomeCodeValue.

java regex

1
推荐指数
1
解决办法
153
查看次数

斜体的变量类型

我正在使用jetty websocket包中的Outbound方法.

但是,出站变量名称在Netbeans中以斜体显示.这是什么意思?我应该避免使用这种方法吗?

这就是它在netbeans中出现的方式(为了清楚起见,我将斜体显示出来);

import org.eclipse.jetty.websocket.WebSocket.<i>Outbound</i>;

private <i>Outbound</i> mOutbound;
Run Code Online (Sandbox Code Playgroud)

java netbeans

1
推荐指数
1
解决办法
3268
查看次数