小编Chr*_*ams的帖子

Maven似乎正在拉入具有测试范围的罐子

我有一个正在建造的战争模块,并且包括一些它不应该的收缩包装罐.即:

WEB-INF/lib/shrinkwrap-api-1.0.0.jar
WEB-INF/lib/shrinkwrap-descriptors-api-base-2.0.0-alpha-2.jar
WEB-INF/lib/shrinkwrap-descriptors-spi-2.0.0-alpha-2.jar
WEB-INF/lib/shrinkwrap-resolver-api-1.0.0-beta-6.jar
WEB-INF/lib/shrinkwrap-spi-1.0.0.jar
Run Code Online (Sandbox Code Playgroud)

这些依赖项都在我们的poms中列为test-scoped,因此它们不应该在我们的打包战争中.更多信息如下,但我的问题是:为什么这些在这里.显然我缺少一些东西 - 它是什么/我在哪里可以找到它?

当我展示我的有效pom时,我看到以下依赖项(在这里省略了一堆东西):

<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/xsd/maven-4.0.0.xsd">
...
  <dependencyManagement>
    <dependencies>
    ...
      <dependency>
        <groupId>org.jboss.shrinkwrap</groupId>
        <artifactId>shrinkwrap-extension-descriptors</artifactId>
        <version>1.0.0-beta-6</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap</groupId>
        <artifactId>shrinkwrap-api</artifactId>
        <version>1.0.0</version>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap</groupId>
        <artifactId>shrinkwrap-spi</artifactId>
        <version>1.0.0</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap</groupId>
        <artifactId>shrinkwrap-impl-base</artifactId>
        <version>1.0.0</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-api</artifactId>
        <version>1.0.0-beta-6</version>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-api-maven</artifactId>
        <version>1.0.0-beta-6</version>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
        <version>1.0.0-beta-6</version>
        <scope>runtime</scope>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.descriptors</groupId>
        <artifactId>shrinkwrap-descriptors-api-base</artifactId>
        <version>2.0.0-alpha-2</version>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.descriptors</groupId>
        <artifactId>shrinkwrap-descriptors-api-javaee</artifactId>
        <version>2.0.0-alpha-2</version>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.descriptors</groupId>
        <artifactId>shrinkwrap-descriptors-api-jboss</artifactId>
        <version>2.0.0-alpha-2</version>
      </dependency>
      <dependency>
        <groupId>org.jboss.shrinkwrap.descriptors</groupId>
        <artifactId>shrinkwrap-descriptors-gen</artifactId>
        <version>2.0.0-alpha-2</version>
        <scope>provided</scope>
      </dependency>
      <dependency> …
Run Code Online (Sandbox Code Playgroud)

dependency-management maven-3 maven

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

JPA一对一关系,其中实体可能不存在

我有两个实体之间的多对一映射(A和B,一个B可以与许多As相关联),我需要能够在A(A.B_ID)上获得B的ID,其中特定的B实体不存在于数据库中.这可能吗?

我们代码的一个(简化)示例:

@Entity
@Table(name = "A")
public class A implements java.io.Serializable {

    // ...

private B b;

    // ...

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "B_ID")
    public B getB() {
        return this.b;
    }

    // ...
}


@Entity
@Table(name = "B")
public class B implements java.io.Serializable {

    // ...

private Set<A> as = new HashSet<A>( 0 );

    // ...

    @OneToMany( fetch = FetchType.LAZY, mappedBy = "b" )
    public Set<A> getAs() {
         return this.as;
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

这个基本设置最终会让Hibernate试图为A.B_ID保存一个null值,而这是不允许的:

Caused by: java.sql.BatchUpdateException: ORA-01400: …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa one-to-many

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

有没有办法使用 Hibernate 的 Criteria API 对结果进行排名?

我有一个查询将变得非常复杂,我们希望将其切换到 Criteria API 以使其易于管理。我们基本上选择一些与过滤器匹配的数据,但根据匹配的过滤器数量对结果集进行排序。我们通过在 select 子句中添加一个字段来跟踪匹配的过滤器数量。

一个例子会有所帮助:

http://sqlfiddle.com/#!4/90e02/2

有什么方法可以使用 Hibernate Criteria API 做到这一点。我们的目标是确保这不会成为创建我们必须维护的大型 HQL 字符串的代码。

我不一定需要一个例子作为答案(虽然那会很棒!)但是一个是/否和一些指向我如何完成它的东西会起作用。

oracle hibernate jpa hql criteria

5
推荐指数
0
解决办法
1908
查看次数

即使没有任何变化,Spring Auditable实体也会被修改

注意:这是一个复杂的问题,所以我希望我已经涵盖了相关部分.如果没有,我将根据要求编辑和添加更多信息.

我们正在使用Spring(4.1.0)和Hibernate(4.3.6),我们已经定义了一个基类,我们所有的实体都扩展了它们BaseAuditableEntity(下面的代码).当任何实体在一个@Transactional方法被加载,然后修改并保存,该实体的modified_by_user_idmodified_ts都与登录的执行正在取得任何更改的用户的ID进行更新.

我们的问题是,每当一个AppUser(这也延伸BaseAuditableEntity)在其中一个被加载@Transactional方法,它也看到了modified_by_user_idmodified_ts,即使它没有被修改设定.这会产生一个问题,因为我们在不需要的时候几乎每个请求都写入我们的用户表.请注意,这也可能会影响@TransactionalAppUser显式加载的方法,因为AuditorBean加载AppUser自身.

我假设这与AppUser实体是BaseAuditableEntity本身的一部分有关.有人能证实吗?有没有办法解决这个问题?

我们的BaseAuditableEntity类包括AppUser在内的每个实体都扩展了:

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseAuditableEntity implements Auditable<AppUser, Long> {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "hibernate_sequence")
    @SequenceGenerator(name = "hibernate_sequence", sequenceName = "blah_sequence", allocationSize = 1)
    @Column(name = "id")
    private Long id;

    @CreatedBy
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "created_by_user_id")
    private AppUser createdBy;

    @LastModifiedBy
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "modified_by_user_id")
    private AppUser …
Run Code Online (Sandbox Code Playgroud)

java audit spring hibernate

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

在 Java Tomcat Web 应用程序中存储加密密钥以加密/解密数据库中的敏感数据的最佳实践是什么?

我们遇到了在将某些敏感数据存储到 PostgreSQL 数据库之前对其进行加密的要求。我们的应用程序是一个运行在 Tomcat 之上的 Spring 应用程序。我们需要存储密钥,以便我们的 Web 应用程序可以在插入数据之前对其进行加密,并在检索数据后对其进行解密。

我们希望避免将此类内容存储在我们的配置文件(或由 Maven 过滤的文件)中,因为这些文件已签入源代码管理并可供任何有权访问的人读取。我们似乎在数据库凭据方面遇到了同样的问题,但看起来JNDI 数据源可以解决这些问题。

使用 Tomcat 时是否有最佳实践?环境变量之类的东西可能有用,但维护起来很麻烦。

编辑:为了澄清,我们试图防止由于未经授权访问实际数据库文件而导致敏感数据丢失。我们的数据库与应用程序服务器位于不同的物理盒子上,因此我们可以轻松地将密钥保留在应用程序服务器所在的服务器上。

java encryption postgresql spring tomcat

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

@Basic(可选= false) vs @Column(nullable = false) vs @NotNull

在这三个选项中,我应该使用一个或两个或全部三个选项组合来防止空值?

@NotNull
@Column(name = "SOME_VALUE", nullable = false)
@Basic(optional = false)
private String someValue;
Run Code Online (Sandbox Code Playgroud)

请注意,我不认为这与现有问题重复。我看到许多 问题都询问这三个选项的子集,但尚未找到一个询问这三个选项中哪一个适合在现代 JPA/Hibernate 堆栈中使用的问题。

validation hibernate jpa jsr

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

部署在Mac上的JBoss AS7应用程序无法找到com.apple.laf.AquaLookAndFeel

我们从旧版本的JBoss迁移到JBoss AS7,我们在应用程序的一部分使用JFreeChart:

chart = ChartFactory.createStackedBarChart( "", "", "Data", dataset,
            PlotOrientation.HORIZONTAL, true, false, false );
Run Code Online (Sandbox Code Playgroud)

当我们点击这一行时,我们得到下面的堆栈跟踪,表明找不到com.apple.laf.AquaLookAndFeel.我们只在Mac上看到这个问题,因为com.apple.laf包名称是有意义的.在Linux服务器上运行似乎工作正常.我们需要做些什么来让Mac上的AS7识别Apple的外观类吗?

我尝试过的所有Mac都在2012年4月26日全面更新.我找不到一个有一些旧JVM的人.

堆栈跟踪:

15:38:30,125 SEVERE [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http--0.0.0.0-8080-1) JSF1054: (Phase ID: RENDER_RESPONSE 6, View ID: /blah/blah/blah/blahInfo.xhtml) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@3dc264b1]
15:38:30,129 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/mgmt].[Faces Servlet]] (http--0.0.0.0-8080-1) Servlet.service() for servlet Faces Servlet threw exception: java.lang.ClassNotFoundException: com.apple.laf.AquaLookAndFeel from [Module "deployment.blah_war-1001.0-SNAPSHOT.war:main" from Service Module Loader]
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:423)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
    at java.lang.Class.forName0(Native Method) [classes.jar:1.6.0_31]
    at java.lang.Class.forName(Class.java:247) [classes.jar:1.6.0_31]
    at javax.swing.SwingUtilities.loadSystemClass(SwingUtilities.java:1856) [classes.jar:1.6.0_31]
    at javax.swing.UIManager.setLookAndFeel(UIManager.java:563) …
Run Code Online (Sandbox Code Playgroud)

java macos jfreechart classnotfoundexception jboss7.x

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

HQL(休眠)如何检查元素列表是否为另一个列表的子集?

我很难创建一个HQL查询,该查询检查表'X'的记录'a'的列表是否包含在同一表'X'的另一个列表'b'中。

这是我正在使用的示例:

select r 
from Role r 
where (
    select p 
    from Permission p 
    where p.name = 'test') in elements(r.permissions)
Run Code Online (Sandbox Code Playgroud)

现在,此查询仅作为示例,为了澄清一点,每个角色都具有1个或多个权限。

现在发生了什么,如果子选择(权限p)返回1行,则一切正常。但是如果选择更多,查询将失败,因为我正在尝试检查列表是否在列表中...

我确定我在这里缺少任何东西,因此请提供任何帮助。

谢谢

java hibernate hql

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

有没有办法绕过 AuditingEntityListener 来设置测试数据?

我们有一个 Spring 项目,它在 JPA 实体上使用 AuditingEntityListener:

@EntityListeners(AuditingEntityListener.class)
Run Code Online (Sandbox Code Playgroud)

我们的基本实体的lastModifiedDate定义为:

@Column(name = "modified_time")
@LastModifiedDate
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
Run Code Online (Sandbox Code Playgroud)

保存或更新实体时会自动设置该值 - 这就是我们希望应用程序的行为方式。但是,当我们尝试在测试套件中设置数据时,我们会遇到问题,因为在某些情况下(不是全部),我们希望绕过该字段的自动设置并自己设置值。在这种特定情况下,我们尝试订购一堆测试数据,然后对其进行测试。

有没有办法绕过或关闭 AuditingEntityListener 以创建测试数据?

java spring unit-testing jpa auditing

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

Eclipse中的Maven插件"标记无效"(Mars - 4.5.0)

我有一个新创建的Maven项目,我导入Eclipse.Eclipse抱怨其中一个插件:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>2.7</version>
            <configuration>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

我在Eclipse中使用了EMBEDDED 3.3.1/1.6.0.20150526-2031版本的Maven.

这是错误:

Mark invalid (org.apache.maven.plugins:maven-resources-plugin:2.7:resources:default-resources:process-resources)

org.apache.maven.plugin.MojoExecutionException: Mark invalid
    at org.apache.maven.plugin.resources.ResourcesMojo.execute(ResourcesMojo.java:306)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:331)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl$11.call(MavenImpl.java:1362)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl$11.call(MavenImpl.java:1)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:1360)
    at org.eclipse.m2e.core.project.configurator.MojoExecutionBuildParticipant.build(MojoExecutionBuildParticipant.java:52)
    at org.eclipse.m2e.core.internal.builder.MavenBuilderImpl.build(MavenBuilderImpl.java:137)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:172)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:1)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1$1.call(MavenBuilder.java:115)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1.call(MavenBuilder.java:105)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.execute(MavenBuilder.java:86)
    at org.eclipse.m2e.core.internal.builder.MavenBuilder.build(MavenBuilder.java:200)
    at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:205)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:245)
    at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:300)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:303)
    at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:359)
    at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:382)
    at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144) …
Run Code Online (Sandbox Code Playgroud)

java eclipse maven

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