小编mku*_*uff的帖子

JPA 2:外键中的多列使用

我使用Hibernate作为持久性提供程序,并使用JPA 2为我的实体建模.

现在提出了一个问题,我希望你能帮助我.

在我的应用程序中,您可以打开一个游戏,在其中创建一组玩家并在地图上四处走动(瓦片(2d)).

首先我的实体定义:游戏:

@Entity
public class Game implements Serializable {
@Id
@SequenceGenerator(name = "gen_gameid", sequenceName = "seq_gameid")
@GeneratedValue(generator="gen_gameid")
private long gameid;

/**
 * Playing Characters.
 */
@OneToMany(mappedBy = "game")
private List<Character> characters;
private int round = 0;

@OneToMany(mappedBy="game")
private List<Tile> tiles;

@OneToMany(mappedBy="game")
private List<Group> group;
Run Code Online (Sandbox Code Playgroud)

平铺(将从模板创建一个平铺,只属于一个游戏):

@Entity @IdClass(TileId.class)
public class Tile implements Serializable{
    private static final long serialVersionUID = 2039974286110729270L;

    @Id
    private int x;

    @Id
    private int y;

    @Id @ManyToOne @JoinColumn(name="gameid")
    private Game game;

    @OneToOne(mappedBy="tile")
    private Character character; …
Run Code Online (Sandbox Code Playgroud)

java postgresql hibernate jpa-2.0

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

Wildfly数据源与DefaultDS冲突

我从jboss 7.1迁移到wildfly,我的数据源有一些问题.

10:04:37,900 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 49) JBAS017502: Undertow 1.0.0.Final starting
10:04:37,901 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-2) JBAS017502: Undertow 1.0.0.Final starting
10:04:37,903 INFO  [org.jboss.as.webservices] (ServerService Thread Pool -- 50) JBAS015537: Activating WebServices Extension
10:04:37,904 INFO  [org.jboss.as.security] (MSC service thread 1-3) JBAS013170: Current PicketBox version=4.0.20.Final
10:04:37,913 INFO  [org.jboss.as.connector.subsystems.datasources] (ServerService Thread Pool -- 28) JBAS010404: Deploying non-JDBC-compliant driver class org.postgresql.Driver (version 9.0)
10:04:37,919 INFO  [org.jboss.as.connector.deployers.jdbc] (MSC service thread 1-6) JBAS010417: Started Driver service with driver-name = postgresql
10:04:37,924 …
Run Code Online (Sandbox Code Playgroud)

java java-ee wildfly

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

javax.ejb.EJBAccessException:JBAS013323:无效的用户

在从JBoss 7迁移到WildFly的过程中,我遇到了另一个问题.调用受@RolesAllowed("ADMIN")我保护的休息服务时会收到以下错误:

13:46:44,359 ERROR [org.jboss.as.ejb3.invocation] (default task-1) JBAS014134: EJB Invocation failed on component TestFacade for method public java.lang.String net.dice.facade.TestFacade.generateTestdata(): javax.ejb.EJBAccessException: JBAS013323: Invalid User
    at org.jboss.as.ejb3.security.SecurityContextInterceptor$1.run(SecurityContextInterceptor.java:66) [wildfly-ejb3-8.0.0.Final.jar:8.0.0.Final]
    at org.jboss.as.ejb3.security.SecurityContextInterceptor$1.run(SecurityContextInterceptor.java:46) [wildfly-ejb3-8.0.0.Final.jar:8.0.0.Final]
    at org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:92) [wildfly-ejb3-8.0.0.Final.jar:8.0.0.Final]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64) [wildfly-ejb3-8.0.0.Final.jar:8.0.0.Final]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) [wildfly-ejb3-8.0.0.Final.jar:8.0.0.Final]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:55) [wildfly-ejb3-8.0.0.Final.jar:8.0.0.Final]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326)
    at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:448)
    at org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:61)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:326)
    at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80)
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
    at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
    at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:185)
    at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:182)
    at …
Run Code Online (Sandbox Code Playgroud)

security ejb jaas java-ee wildfly

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

Jacoco - 零覆盖率

我正在尝试将jacoco集成到我们的ant构建中,并使用一个简单的测试项目对其进行评估.

编译和其他输出看起来很有希望,但是当我查看覆盖范围时,它总是为零.

package alg;

public class SpecialAlgorithm {
    public SpecialAlgorithm() {}

    public int uncoveredMethod(int i) {
        return i * i;
    }

    public int sum(int i, int j) {
        return i + j;
    }   
}
Run Code Online (Sandbox Code Playgroud)

测试用例:

package alg;

import static org.junit.Assert.assertEquals;
import org.junit.Test;
import alg.SpecialAlgorithm;

public class SpecialAlgorithmTest {
    @Test
    public void testSum() {
        SpecialAlgorithm alg = new SpecialAlgorithm();
        int sum = alg.sum(1, 2);
        assertEquals(3, sum);
    }
}
Run Code Online (Sandbox Code Playgroud)

Ant脚本:

<project xmlns:jacoco="antlib:org.jacoco.ant" name="Code Coverage with JaCoCo"
    default="rebuild">
    <property name="src.dir" location="../java" />
    <property …
Run Code Online (Sandbox Code Playgroud)

java jacoco

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

为什么Tomcat在取消部署期间抛出'java.lang.IllegalStateException:Class invariant violation'?

我有一个web-app(Tomcat 6,log4j 1.2.16),它以一个监听器开头.取消部署应用程序会引发以下异常:

 INFO (HqListener.java:28) - HqListener exited!
log4j:ERROR log4j called after unloading, see http://logging.apache.org/log4j/1.2/faq.html#unload.
java.lang.IllegalStateException: Class invariant violation
    at org.apache.log4j.LogManager.getLoggerRepository(LogManager.java:199)
    at org.apache.log4j.LogManager.getLogger(LogManager.java:228)
    at org.apache.log4j.Logger.getLogger(Logger.java:117)
    at com.mchange.v2.log.log4j.Log4jMLog.getMLogger(Log4jMLog.java:51)
    at com.mchange.v2.log.MLog.getLogger(MLog.java:145)
    at com.mchange.v2.sql.SqlUtils.<clinit>(SqlUtils.java:37)
    at com.mchange.v2.c3p0.DataSources.pooledDataSource(DataSources.java:290)
    at com.mchange.v2.c3p0.DataSources.pooledDataSource(DataSources.java:316)
    at org.hibernate.connection.C3P0ConnectionProvider.configure(C3P0ConnectionProvider.java:181)
    at org.hibernate.connection.ConnectionProviderFactory.newConnectionProvider(ConnectionProviderFactory.java:143)
    at org.hibernate.ejb.InjectionSettingsFactory.createConnectionProvider(InjectionSettingsFactory.java:51)
    at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:90)
    at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2863)
    at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2859)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1870)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:906)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
    at net.hq.util.Db.init(Db.java:15)
    at net.hq.process.ConnectionGateway.run(ConnectionGateway.java:89)
    at java.lang.Thread.run(Thread.java:662)
Exception in thread "HQ Gateway Thread" java.lang.NullPointerException
    at net.hq.process.ConnectionGateway.run(ConnectionGateway.java:129)
    at java.lang.Thread.run(Thread.java:662)
Jul 3, 2011 3:03:53 AM org.apache.catalina.core.StandardContext …
Run Code Online (Sandbox Code Playgroud)

java tomcat log4j

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

Hibernate获取连接 - >无法获取多个包

问题是我的实体中有两个袋子,我想在我的jsf前端显示(后面的Spring,所以没有延迟加载).所以我必须急切地获取它们以在这样的列表中显示信息:

  • 第1点(标签1,标签2)(标签1 ...标签n)
  • 第2点(标签3,标签4)(标签1 ...标签n)

将两个列表都置于渴望之中并不起作用.所以我尝试了一下fetch join.它允许我获取一个列表,但是当我添加第二个列表时,我得到了已知的"无法获取多个包"错误.

Hibernate可以在查询中处理两个fetch连接吗?

public class PointOfInterest
 @OneToMany(mappedBy="poi")
private List<PointOfInterestLabel> labels = new ArrayList<PointOfInterestLabel>();

@ManyToMany
private List<Tag> tags = new ArrayList<Tag>();
Run Code Online (Sandbox Code Playgroud)

我的获取加入:

SELECT DISTINCT p from PointOfInterest p 
        left join fetch p.labels 
        left join fetch p.tags WHERE p.figure = :figure
Run Code Online (Sandbox Code Playgroud)

在启动时,我的hibernate工厂的创建失败了:

Caused by: org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
    at org.hibernate.loader.BasicLoader.postInstantiate(BasicLoader.java:94)
    at org.hibernate.loader.hql.QueryLoader.<init>(QueryLoader.java:123)
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206)
    at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:98)
    at org.hibernate.impl.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:557)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:422)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
    at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
    at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:883)
    ... 55 more
Run Code Online (Sandbox Code Playgroud)

hibernate join fetch jpa-2.0

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

JAXB按原样使用String

我使用REST,我想知道我是否可以告诉jaxb将字符串字段"as-it-is"插入到传出的xml中.当然我会在返回之前将其解包,但我想保存这一步.

@XmlRootElement(name="unnestedResponse")
public class Response{
 @Insert annotation here ;-)
 private String alreadyXml;
 private int otherDate; ...
}
Run Code Online (Sandbox Code Playgroud)

是否有可能告诉JAXB只使用String而不是转义?我希望客户端不必解析我的响应,然后解析此字段.

问候,m

jaxb jaxb2

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

AWS DynamoDb 本地 - 询问区域

我正在研究这些示例,但我根本无法像给定的 cli 示例中那样监听表格。

我的 cli 参数

java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -inMemory

aws dynamodb list-tables --endpoint-url http://localhost:8000
Run Code Online (Sandbox Code Playgroud)

然后它总是要求我提供一个区域并将我指向“aws configure”。当我在凭据和本地区域中输入任何内容时,我得到:

Unable to locate credentials. You can configure credentials by running "aws configure".
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我只是想在使用云本身之前在本地玩一下以更熟悉 cli 界面。让我烦恼,但我无法让它工作。

感谢您的任何提示!

amazon-web-services amazon-dynamodb

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

如何在HQL中按列表大小选择对象?

我的实体定义如下:

public class Entity implements Serializeable {
      @ManyToMany(mappedBy="entities")
      private List<OtherEntity> otherEntities;

}
Run Code Online (Sandbox Code Playgroud)

如何在HQL中选择具有多个OtherEntity的所有实体?

java hibernate hql

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

Java Hibernate Criteria选择子类

我想使用Criteria API通过从搜索值中获取输入来选择实体.文档可以包含更多收件人.收件人有许多子类

@Entity
public class Document implements Serializable {
  @OneToMany(mappedBy="document")
  private List<Recipient> recipients = new ArrayList<Recipient>();


@Entity
public class RecipientAccount extends Recipient {
  String name;
Run Code Online (Sandbox Code Playgroud)

如何选择具有特定名称的ReciepientAccount的所有文档?我需要搜索所有子类并用OR连接它们.有优雅的方式吗?

问候

java hibernate criteria-api

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

了解Hibernate Fetch

我知道hibernate是懒惰的默认提取策略,但有一些事情我不清楚,所以我希望你能解释一下.我想要做的是将标记为标记为起始图块的图块.

查询:

@NamedQuery(name = "Tile.findStartTileByGame", 
  query = "SELECT t FROM Tile t WHERE t.game = :game " +
    "and t.startTile = true and t.blockWalkable = false")
Run Code Online (Sandbox Code Playgroud)

瓦:

 public class Tile{ 

 @OneToOne(mappedBy="tile")
 private GameCharacter character;

 @OneToOne(mappedBy="tile")
 private GameObject gameObject;
Run Code Online (Sandbox Code Playgroud)

游戏:

 @OneToMany(mappedBy="game")
 private List<Tile> tiles;
Run Code Online (Sandbox Code Playgroud)

当我运行我的查询并且从不使用该对象时,hibernate仍然加入了我的角色和游戏对象.所以我有3个查询.我知道我可以通过fetch join来解决这个问题,但我的问题是为什么hibernate会同时获取两个引用?即使我使用fetch = FetchType.LAZY对它们进行注释,也会查询它.

我的DAO:

  public static Tile getFreeStartTile(EntityManager em, Game game) {
   TypedQuery<Tile> query = em.createNamedQuery("Tile.findStartTileByGame", Tile.class);
   query.setParameter("game", game);
  List<Tile> result = query.getResultList();
  ...
Run Code Online (Sandbox Code Playgroud)

在我解决这个问题之前,我想了解它为什么会发生.在此先感谢m

java hibernate jpa

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

用 lambdas 替换命令式 for 循环

我目前正在编写一个有趣的游戏,我注意到我仍然回到“旧”的循环方式。谁能帮我看看这个方法在使用 lambda 时会是什么样子?

public GameObject findClosestEnemy(Game game, GameObject actor) {
    Double minDistance = null;
    GameObject closestEnemy = null;

    for (GameObject o : game.getObjects()) {
        if (isNoEnemy(actor, o)) {
            continue;
        }

        double distance = actor.calculateMinEuclideanDistance(o);
        if (minDistance == null || distance < minDistance) {
            minDistance = distance;
            closestEnemy = o;
        }
    }
    return closestEnemy;
}
Run Code Online (Sandbox Code Playgroud)

java lambda

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