小编Bet*_*sta的帖子

Intellij IDEA:指定JPA验证的数据源

我有一个Spring项目,用于在Intellij IDEA中设置的小型Web应用程序.

它在Hibernate之上使用JPA作为持久层.数据源(MySQL)在Spring应用程序上下文中定义:

    <!-- Values are configured via the property override -->
    <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" >
        <property name="driverClassName" value=""/>
        <property name="url" value=""/>
        <property name="username" value=""/>
        <property name="password" value=""/>
    </bean>
Run Code Online (Sandbox Code Playgroud)

实际值从属性文件中读取,并在Spring运行时使用属性覆盖机制注入.

然后将数据源注入到同一应用程序上下文中的实体管理器工厂中:

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="myDataSource"/>
    </bean>
Run Code Online (Sandbox Code Playgroud)

最后,实体管理器使用注释注入DAO:

/**
 * Shared, thread-safe proxy for the actual transactional EntityManager
 */
@PersistenceContext
private EntityManager em;
Run Code Online (Sandbox Code Playgroud)

当我构建并部署到Tomcat时,一切正常,但Intellij的JPA验证似乎并不了解从何处获取数据源.

在我的实体中,表的名称和列的名称用红色下划线,验证消息是"无法解析表"或"无法解析列":

@Entity
@Table(name = "domain")
public class Domain extends AbstractAgendaEntity {
Run Code Online (Sandbox Code Playgroud)

在这个例子中,它"domain"是不被认为有效的部分.

我已经在"数据库"工具窗口中手动配置了我的数据库,我可以在控制台中看到我的表并执行SQL查询.

如何告诉Intellij使用此数据源来解析JPA实体的表名?

java spring jpa intellij-idea

38
推荐指数
3
解决办法
3万
查看次数

如何使用Spring通过脚本初始化内存中的HSQLDB

我正在尝试对我的DAO进行单元测试(使用Spring和Hibernate).我在教程中使用的是HSQLDB .该教程指出可以使用SQL脚本初始化内存中的HSQLDB数据库,但是我无法在Spring中找到有关如何执行此操作的信息.这是相关的Spring上下文配置:

 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
    <property name="url" value="jdbc:hsqldb:mem:mydb" />
    <property name="username" value="sa" />
    <property name="password" value="" />
    <property name="initialSize" value="5" />
    <property name="maxActive" value="10" />
    <property name="poolPreparedStatements" value="true" />
    <property name="maxOpenPreparedStatements" value="10" />
</bean> 
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激.谢谢.

java spring hsqldb

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

无法在logback.xml中使用Spring Property Place

我有一个使用Logback的Spring Boot控制台应用程序.所有属性(对于应用程序以及对于Logback)都被外部化到类路径中的标准application.properties文件中.这些属性在应用程序本身中很好地被选中,但是在logback.xml文件中没有被选中.看起来好像在Spring Boot启动之前处理了logback.xml,因此不会处理EL占位符.

使用FileNamePattern作为示例,在application.properties中,我有这样的事情:

log.filePattern=/%d{yyyy/MM-MMMM/dd-EEEE}
Run Code Online (Sandbox Code Playgroud)

在logback.xml中,我会这样:

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <FileNamePattern>${log.logDirectory}${log.filePattern}.log
    </FileNamePattern>
</rollingPolicy>
Run Code Online (Sandbox Code Playgroud)

运行应用程序时,我会看到以下错误:

ERROR in ch.qos.logback.core.joran.spi.Interpreter@24:25 - 
RuntimeException in Action for tag [rollingPolicy]
java.lang.IllegalStateException: FileNamePattern
[log.logDirectory_IS_UNDEFINEDlog.filePattern_IS_UNDEFINED.log]
does not contain a valid DateToken
Run Code Online (Sandbox Code Playgroud)

类似的代码在其他Spring(而不是Spring Boot)应用程序中运行得很好,所以我很好奇Spring Boot的行为有点不同.

解:

感谢@Gary的回复!很高兴知道Spring EL和Logback变量之间的区别......我原以为是Spring负责为我解析这些变量.我确实有元素,但这让我思考.

我的application.properties文件在jar之外,所以Logback不知道在哪里找到它.通过保持我的春节,相关的属性在我的外部application.properties文件,移动日志相关的属性为application-internal.properties文件(位于里面的罐子),并指向的logback到文件(<property resource="application-internal.properties" />)得到的一切工作正常!

java spring logback spring-boot

34
推荐指数
3
解决办法
3万
查看次数

在将Spring 3.1与Hibernate 4.0.1一起使用时,如何解决java.lang.ClassNotFoundException:org.hibernate.util.DTDEntityResolver?

我最近升级到Hibernate 4.0.1.Final并在上下文启动时收到以下错误:

Caused by: java.lang.NoClassDefFoundError: org/hibernate/util/DTDEntityResolver
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2823)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1160)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1655)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1533)
    at org.hibernate.cfg.Configuration.reset(Configuration.java:322)
    at org.hibernate.cfg.Configuration.<init>(Configuration.java:261)
    at org.hibernate.cfg.Configuration.<init>(Configuration.java:265)
    at org.hibernate.ejb.Ejb3Configuration.<clinit>(Ejb3Configuration.java:150)
    at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:71)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:257)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
    ... 65 more
Caused by: java.lang.ClassNotFoundException: org.hibernate.util.DTDEntityResolver
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1688)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1533)
Run Code Online (Sandbox Code Playgroud)

我的配置如下:

<!-- Holding Properties for hibernate -->
    <context:property-placeholder location="classpath:hibernate.properties"/>

    <!-- Configure annotated beans -->
    <context:annotation-config />
    <context:component-scan base-package="com.mypackage" />

    <!-- Drives transactions using local JPA APIs -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    <bean …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa

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

Spring MVC表单标签:是否有标准方法添加"无选择"项?

有一个选择下拉列表,我想在列表中添加"No selection"项目,在提交时应该给我'null'.我正在使用SimpleFormController派生控制器.

protected Map referenceData(HttpServletRequest httpServletRequest, Object o, Errors errors) throws Exception {
    Map<String, Object> map = new HashMap<String, Object>();

    map.put("countryList", Arrays.asList(Country.values()));

    return map;
}
Run Code Online (Sandbox Code Playgroud)

并且jspx部分是

<form:select path="country" items="${countryList}" title="country"/>
Run Code Online (Sandbox Code Playgroud)

一种可能的解决方案似乎是在列表的开头添加一个空值,然后使用自定义PropertyEditor将此"null"显示为"No selection".有更好的解决方案吗?

@Edit:我用自定义验证注释解决了这个问题,该注释检查所选值是否为"No Selection".有更标准,更简单的解决方案吗?

java forms spring spring-mvc

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

RestTemplate - 处理异常中的响应头/主体(RestClientException,HttpStatusCodeException)

在我的restful webservice中,如果出现错误请求(5xx)或4xx respose代码,我会在响应中写一个自定义标题"x-app-err-id".

在客户端,我使用RestTemplate的交换方法来进行RestFul Web服务调用.当响应代码为2xx时,一切都很好.

ResponseEntity<Component> response = restTemplate.exchange(webSvcURL,
    HttpMethod.POST, 
    requestEntity,
    Component.class);
Run Code Online (Sandbox Code Playgroud)

但是如果有异常(HttpStatusCodeException),因为它是一个错误的请求(5xx)或4xx,在HttpStatusCodeException的catch块中,我得到响应(见上文)为null,所以我没有访问我的自定义头我在我的网络服务中设置.如果RestTemplate中存在异常,如何从响应中获取自定义标头.

还有一个问题是,我在错误的情况下在响应体中设置了一个错误对象(json),我想知道如何在RestTemplate中出现异常时访问响应体

response resttemplate

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

使用我的第一个Maven,Spring项目获取org.springframework.beans.factory.BeanCreationException

使用我的第一个Maven,Spring Project获取org.springframework.beans.factory.BeanCreationException.我已经使用eclipse和Spring进行了一段时间的编程,但我正在研究使用maven来帮忙.

我在eclipse中有一个maven项目,这是我的pom.xml文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.springsource.greenbeans.maven</groupId>
    <artifactId>WebFlowTemplate</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>WebFlowTemplate Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>3.6.3.Final</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>4.3.0.Final</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.webflow</groupId>
            <artifactId>spring-webflow</artifactId>
            <version>2.3.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-config</artifactId>
            <version>3.1.2.RELEASE</version>
        </dependency>


        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>



    </dependencies>
    <build>
        <finalName>WebFlowTemplate</finalName>
    </build>
</project>
Run Code Online (Sandbox Code Playgroud)

但是如果我尝试运行这个Spring WebFlow项目,我会收到以下错误.我的pox.xml中缺少什么.有人可以帮我这个.

EVERE: Exception sending context initialized event to listener instance …
Run Code Online (Sandbox Code Playgroud)

java eclipse spring spring-mvc maven

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

JPA 2.0使用Hibernate作为提供程序 - 例外:没有EntityManager的持久性提供程序

我正在尝试通过遵循Hibernate EntityManager 文档中的信息来设置一个简单的jpa 2.0项目.我已经在这几个小时了,但无论我做什么,当我尝试创建一个EntityManagerFactory时,我总是得到这个异常:

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named manager1
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
    at se.mycomp.UserTest.main(UserTest.java:9)
Run Code Online (Sandbox Code Playgroud)

我发现了很多关于这个例外的类似问题,但没有我能够解决的解决方案.我在这做错了什么?

目录结构

.
??? pom.xml
??? src
    ??? main
    ?   ??? java
    ?   ?   ??? se
    ?   ?       ??? mycomp
    ?   ?           ??? UserTest.java
    ?   ?           ??? domain
    ?   ?               ??? User.java
    ?   ??? resources
    ?       ??? META-INF
    ?       ?   ??? persistence.xml
    ?       ??? log4j.properties
    ??? test
        ??? java
Run Code Online (Sandbox Code Playgroud)

我的persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0"> …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa maven

26
推荐指数
1
解决办法
8万
查看次数

log4j appender阈值和类别

让我先说一下这个问题,说我已经筋疲力尽了谷歌,或者至少我一直想要搜索的东西."log4j的门槛","log4j的门槛类","Log4j追加门槛类"等,但我真的不明白我正从谷歌后面的结果.

这是我给出的完整配置.我无法弄清楚如何修改它以满足我的需要.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<!-- ===================================================================== -->
<!--                                                                       -->
<!--  Log4j Configuration                                                  -->
<!--                                                                       -->
<!-- ===================================================================== -->

<!-- $Id: jboss-log4j.xml 62403 2007-04-18 15:26:43Z dimitris@jboss.org $ -->

<!--
| For more configuration infromation and examples see the Jakarta Log4j
| owebsite: http://jakarta.apache.org/log4j
 -->

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">

<!-- ================================= -->
<!-- Preserve messages in a local file -->
<!-- ================================= -->

<appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
  <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
  <param name="File" value="${jboss.server.log.dir}/server.log"/>
  <param name="Append" value="false"/>

  <!-- Rollover at midnight …
Run Code Online (Sandbox Code Playgroud)

configuration log4j

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

恩惠在招摇

我想知道如何以昂首阔步的方式记录枚举.

根据JavaDoc

dataType.有关支持的数据类型,请参阅文档.如果数据类型是自定义对象,请设置其名称,或者不设置任何名称.在枚举的情况下,使用'string'和allowableValues作为枚举常量.

但我没有找到一些好的Java示例如何真正使用它,规范在这里.

Java的

第一服务

package betlista.tests.swagger;

import betlista.tests.swagger.model.Input;
import betlista.tests.swagger.model.Output;
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;

@Api(value = "first", position = 1)
public class RestServiceFirst {

    @ApiOperation(value = "foo1 operation", httpMethod = "POST", position = 1, nickname = "foo")
    public void foo1(Input input) {

    }

    @ApiOperation(value = "bar1 operation", response = Output.class, httpMethod = "GET", position = 2, nickname = "bar")
    public Output bar1() {
        return null;
    }

}
Run Code Online (Sandbox Code Playgroud)

第二次服务

package betlista.tests.swagger;

import betlista.tests.swagger.model.Input;
import betlista.tests.swagger.model.Output;
import …
Run Code Online (Sandbox Code Playgroud)

java swagger swagger-maven-plugin

24
推荐指数
3
解决办法
4万
查看次数