标签: openjpa

如何配置OpenJPA SQL日志记录?

查看在数据库中执行的SQL查询的OpenJPA配置是什么?我想查看在日志或控制台中执行的所有参数的查询,而不是查看JPQL查询

openjpa

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

数据库分片和JPA

我正在开发一个Java应用程序,它需要在不同的PostgreSQL服务器中对数据进行水平分区.我想使用JPA框架和Spring进行事务管理.

使用JPA分割数据的最流行框架似乎是Hibernate Shards,它似乎不再处于开发阶段,而OpenJPA Slice则不支持虚拟分片(我的要求之一).我还缺少其他任何选项,或者解决OpenJPA限制的方法吗?

提前感谢您的意见!

java hibernate jpa sharding openjpa

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

您如何发回另一个实体拥有的JPA实体的子集?

我有一个拥有另一个实体的实体:

//psuedocode    
public class ClassA{
   private String name;

   @OneToOne
   private ClassB classb;
}

public class ClassB{
   private String thing1;
   private String thing2;
   private String thing3;
}
Run Code Online (Sandbox Code Playgroud)

当我检索ClassA对象时,我不想看到ClassB.thing3,但我确实想看到thing1和thing2:

{
"name":"classa",
"classb":{
         "thing1":"hi",
         "thing2":"there"
        }
}
Run Code Online (Sandbox Code Playgroud)

但如果我查询ClassB,我想看到一切:

{"thing1":"hi",
 "thing2":"there",
 "thing3":"joseph"}
Run Code Online (Sandbox Code Playgroud)

所以我不能只在thing3上放一个忽略注释,因为那时我会在第二次获取时忽略它.我尝试了Converter<ClassB>,但是这迫使我实施toString()fromString()对JSON,其死亡的JSON对象转换为Java端(转换器需要一个字符串,但得到的对象,而不是).

我想尽可能避免自己构建/解析JSON对象,如果可能的话让我的json提供者完成工作.我在约翰逊.

java json openjpa

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

使用JPA更新多行

我想更新一个具有colum NAME值为'PCNAME'的表的所有字段.我想要更新的表名是XYZ.我想只更新一些字段而不保持一些不变.

这会影响很多行而不是单行,因为会有很多行使用NAME ='PCNAME'如何使用JPA.I具有与此表关联的实体类.

java jpa openjpa

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

如何使用openJPA在构建时从单独的jar中增强类?

我试图使用maven插件增强来自另一个Jar的Entity类openjpa-maven-plugin,不幸的是我没有找到正确的方法来实现它.

我在jar中打包的MyPojo模块有一个类:MyDomainmy-domain.jar

public class MyPojo {

private Long id;

...

}
Run Code Online (Sandbox Code Playgroud)

在我的第二个项目MyJpa打包中my-jpa.jar,它取决于模块my-domain.jar,Maven配置为使用Build Time OpenJPA Enhancer,具体如下:

<plugin>
            <groupId>org.apache.openjpa</groupId>
            <artifactId>openjpa-maven-plugin</artifactId>
            <configuration>
                <includes>**/entity/*.class</includes>
                <addDefaultConstructor>true</addDefaultConstructor>
                <enforcePropertyRestrictions>true</enforcePropertyRestrictions>
            </configuration>
            <executions>
                <execution>
                    <id>enhancer</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>enhance</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>org.apache.openjpa</groupId>
                    <artifactId>openjpa</artifactId>
                    <version>2.3.0</version>
                </dependency>
            </dependencies>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

我正在使用orm.xmlpersistence.xml以下位置声明的XML映射:

            ... 
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>

    <mapping-file>META-INF/orm.xml</mapping-file>

 ...
Run Code Online (Sandbox Code Playgroud)

并使用类似于的orm.xml:

    <entity class="MyPojo" access="FIELD">
    <table name="MYPOJO"/>
    <attributes>
        <id name="id">
            <generated-value strategy="AUTO"/>
        </id>
    </attributes>
    </entity>
Run Code Online (Sandbox Code Playgroud)

运行mvn install会出现以下错误:

此配置不允许运行时优化,但在构建时或使用javaagent在类加载时未增强以下列出的类型: …

jpa openjpa maven openjpa-maven-plugin

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

JPA条件API将'in'表达式转换为多个'OR'

具有'in'表达式的JPA条件API转换为多个'OR'而不是'in'

例如

我的主要模特

public class Person {
    ...

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "department_id")
    private Department department;

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

多对一的关系

public class Department {
    @Id
    @Column(name="department_id")
    private Integer departmentId;

    @OneToMany(mappedBy="department")
    private List<Person> person;

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

在persistence.xml中定义了这两个模型(注意:它没有指定任何db方言)

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
    version="2.1">

    <persistence-unit name="primary" transaction-type="JTA">

        <jta-data-source>java:openejb/Resource/jdbc/myDS</jta-data-source>

        <class>com.xyz.Person</class>
        <class>com.xyz.Department</class>
        ...

        <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>

        <properties>
            <property name="openjpa.Log" value="${open.jpa.log}" />
            <property name="openjpa.ConnectionFactoryProperties" value="printParameters=true" />
            <property name="openjpa.RuntimeUnenhancedClasses" value="unsupported" />
        </properties>
    </persistence-unit>

</persistence>
Run Code Online (Sandbox Code Playgroud)

以下是使用Criteria API构建查询的代码:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Person> criteriaQuery = cb.createQuery(Person.class);
Root<Person> personRoot = criteriaQuery.from(Person.class); …
Run Code Online (Sandbox Code Playgroud)

java jpa openjpa

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

JPA:EntityManager的get-use-close和延迟加载

IBM建议使用EntityManagers的最佳做法是get/use/close.如果EntityManager未关闭,则多个线程可能会使用相同的EntityManager,这将导致以下错误:

<openjpa-2.1.2-SNAPSHOT-r422266:1179900 fatal general error> org.apache.openjpa.persistence.PersistenceException: Multiple concurrent threads attempted to access a single broker. By default brokers are not thread safe; if you require and/or intend a broker to be accessed by more than one thread, set the openjpa.Multithreaded property to true to override the default behavior. 
Run Code Online (Sandbox Code Playgroud)

如果加载一个将OneToMany集合映射为fetch = LAZY的对象,如下所示:

public T find(Object id) {
    T t = null;
    EntityManager em = getEm();
    t = em.find(type, id);
    em.close();
    return t;
}

EntityManager getEm() {
    if(this.em ==null || !this.em.isOpen()) { …
Run Code Online (Sandbox Code Playgroud)

java persistence jpa openjpa

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

获取"java.lang.UnsupportedOperationException:"

我创建了一个小型JPA项目来保存学生记录.我使用Oracle数据库.我使用OpenJPA作为JPa提供程序.

我已正确创建了Table学生和相关序列.

学生实体课程

@Entity
@Table(name = "Student")
public class Student implements Serializable {

    private int id;
    private String name;
    private static final long serialVersionUID = 1L;

    public Student() {
        super();
    }

    @Id
    @Column(name = "ID")
    @SequenceGenerator(name = "TRAIN_SEQ", sequenceName = "STUDENT_SEQ")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "TRAIN_SEQ")
    public int getId() {
        return this.id;
    }

    public void setId(int id) {
        this.id = id;
    }

    @Column(name = "NAME")
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = …
Run Code Online (Sandbox Code Playgroud)

java jpa openjpa java-ee ibm-rad

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

如何与JPA查询进行时间戳比较?

我们需要确保在JPQL查询中仅返回过去30天内的结果.一个例子如下:

Date now = new Date();
Timestamp thirtyDaysAgo = new Timestamp(now.getTime() - 86400000*30);

Query query = em.createQuery(
  "SELECT msg FROM Message msg "+
  "WHERE msg.targetTime < CURRENT_TIMESTAMP AND msg.targetTime > {ts, '"+thirtyDaysAgo+"'}");
List result = query.getResultList();
Run Code Online (Sandbox Code Playgroud)

这是我们收到的错误:

<openjpa-1.2.3-SNAPSHOT-r422266:907835 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: An error occurred while parsing the query filter 'SELECT msg FROM BroadcastMessage msg WHERE msg.targetTime < CURRENT_TIMESTAMP AND msg.targetTime > {ts, '2010-04-18 04:15:37.827'}'. Error message: org.apache.openjpa.kernel.jpql.TokenMgrError: Lexical error at line 1, column 217.  Encountered: "{" (123), after : "" …

jpa openjpa jpql

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

如何在 Spring Data JPA 排序中定义空处理?

我需要我的数据按空排序而不是空排序。像下面这样:

Column A
null 
null 
null
8 
10
5
Run Code Online (Sandbox Code Playgroud)

这意味着一旦所有空值都在顶部,其余的值根本不应该被排序并按原样出现。任何想法如何使用 jpa 查询/本机查询来完成。

mysql openjpa spring-data spring-data-jpa

8
推荐指数
2
解决办法
5749
查看次数