我在我的项目中使用spring数据JPA.我正在玩数百万条记录.我有一个要求,我必须获取各种表的数据并构建一个对象,然后在UI上绘制它.现在如何实现我的Spring数据存储库.我已经读过它可以通过命名本机查询来实现.
如果命名的本机查询未返回实体或实体列表,则可以使用@SqlResultSetMapping批注将查询结果映射到正确的返回类型.
但是,当我尝试使用@SqlResultSetMapping
它时,正在采取另一个entityResult.意思是我理解的是它只是将一些查询结果转换为实体结果集,但我想要一个非实体对象的结果集.
@SqlResultSetMapping(
name="studentPercentile",
entities={
@EntityResult(
entityClass=CustomStudent.class,
fields={
@FieldResult(name="id", column="ID"),
@FieldResult(name="firstName", column="FIRST_NAME"),
@FieldResult(name="lastName", column="LAST_NAME")
}
)
}
)
@NamedNativeQuery(
name="findStudentPercentile",
query="SELECT * FROM STUDENT",
resultSetMapping="studentPercentile")
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我只是试图将学生实体的结果转化为另一个不是实体的pojo'CustomStudent '.(这个例子我试图只为POC目的执行,实际的用例很复杂,复杂的查询返回不同的结果集).
如何实现上述用例?除了使用名称查询之外还有其他方法我的存储库方法返回非实体对象吗?
如何限制JPQL命名查询的选择查询?我需要在查询级别本身而不是在java层中完成限制!我正在尝试使用
@NamedQueries(value = {
@NamedQuery(name = UserNotification.QueryName.NOTIFICATION_DISPLAYED,
query = "SELECT un FROM UserNotification un " +
"WHERE un.orgId IN (:orgList) " +
"AND un.user.id = :userId LIMIT 5")
Run Code Online (Sandbox Code Playgroud)
但是徒劳!
请建议
我正在尝试构建一个依赖于JPA2的实现不可知的maven模块.不幸的是,唯一的Maven JPA依赖是基于JPA1,因此,我不能使用EntityManager.detach()方法,因为它只是JPA2选项.
理想情况下,我希望能够在我的Pom中指定我的javax.persistence依赖项,并要求app/container提供JPA2实现.不幸的是,我找不到任何这样的依赖.
在这一点上,我唯一的选择是将hibernate-jpa-2.0-api 1.0.0.FINAL声明为提供的依赖项吗?
我现在正在使用JPA 2.0项目(在Eclipse Indigo中).在我的persistence.xml文件中,我需要指定两个<persistence-unit>标记,因为我有两个不同的数据库可以使用.这样做,我得到以下警告:
定义了多个持久性单元 - 仅识别第一个持久性单元
更重要的是,如果我创建我的实体并将其放在我的第二个<persistence-unit>中,我会收到一个错误,说我的实体未在持久性单元中声明:
类"my.package.MyClass"已映射,但未包含在任何持久性单元中
所以,问题是:是否可以在persistence.xml文件中声明(并按预期使用它们)许多<persistence-unit>标记?如果是,我需要做些什么才能获得准确的行为?
谢谢!
我想知道是否有人有任何这些框架的JPA2.0实现经验?特别是与Spring3.x一起提供EclipseLink支持.
您是否使用这些框架和JPA2.0中的任何一个进行生产?有什么严重问题吗
我正在尝试动态构造查询,我的下一个目标是添加JOIN子句(我不知道如何使用API).
例如,到目前为止,这段代码对我有用:
...
Class baseClass;
...
CriteriaBuilder cb = JpaHandle.get().getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(this.baseClass);
Root entity_ = cq.from(this.baseClass);
Predicate restrictions = null;
...
restrictions = cb.conjunction();
restrictions = cb.and(restrictions, entity_.get("id").in(this.listId));
...
cq.where(restrictions);
...
Query qry = JpaHandle.get().createQuery(cq);
Run Code Online (Sandbox Code Playgroud)
(注意:JpaHandle来自wicket-JPA实现)
我的愿望是添加JOIN子句(尽可能通用)!
我在类中有特定的注释(this.baseClass)
例如 :
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "assay_id", nullable = false)
Run Code Online (Sandbox Code Playgroud)
那么,在标准JPA中有没有这样的方法呢?(注意:这不编译)
这是一个实际的失败方法:
...
Join<Experiment,Assay> experimentAssays = entity_.join( entity_.get("assay_id") );
Run Code Online (Sandbox Code Playgroud)
或者像那样:
...
CriteriaQuery<Customer> q = cb.createQuery(Customer.class);
Root<Customer> c = q.from(Customer.class);
SetJoin<Customer, PurchaseOrder> o = c.join(Customer_.orders);
Run Code Online (Sandbox Code Playgroud)
对我来说,如果它可能更加通用,它会很棒......:
...
Join joinClause = …
Run Code Online (Sandbox Code Playgroud) 这篇文章是继续JPA如何在持久化后从数据库中获取值
当我执行以下操作时,我遇到以下异常,我该如何解决?
Not allowed to create transaction on shared EntityManager - use Spring
transactions or EJB CMT
Run Code Online (Sandbox Code Playgroud)
DAOImpl代码
public void create(Project project) {
entityManager.persist(project);
entityManager.getTransaction().commit();
project = entityManager.find(Project.class, project.getProjectId());
entityManager.refresh(project);
System.out.println("Id -- " + project.getProjectId());
System.out.println("no -- " + project.getProjectNo());
}
Run Code Online (Sandbox Code Playgroud)
applicationContext.xml中
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="DataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="username" value="scott" />
<property name="password" value="tiger" />
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@myserver:1521:ORCL" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" …
Run Code Online (Sandbox Code Playgroud) 我想在hossnate 4.3中使用JBoss 7.1中的多租户功能.
我设法通过在jboss-deployment-structure中添加以下行来将它包含在我的战争中
<exclusions>
<module name="org.hibernate" />
</exclusions>
Run Code Online (Sandbox Code Playgroud)
并在我的pom.xml中为hibernate核心和实体管理器添加依赖项
这使得hibernate 4.3加载但不幸的是我收到了一个错误
java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
Run Code Online (Sandbox Code Playgroud)
这是由于在hibernate 4.3使用JPA 2.1时加载了JPA 2.0
我已经看过这些线程并尝试了他们的建议 从JBoss EAP 6.1中排除JPA子系统 - 尝试在JBoss EAP 6.1中使用JPA 2.1,JBoss AS7自动加载JPA,Hibernate 4.3.0.Final和Spring Data JPA 1.4.3.RELEASE.
我添加了一个persistence.xml
<property name="jboss.as.jpa.managed" value="false" />
Run Code Online (Sandbox Code Playgroud)
从Spring Data中排除了hibernate jpa 2.0
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>${spring-data.version}</version>
<exclusions>
<exclusion>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
</exclusion>
</exclusions>
</dependency>
Run Code Online (Sandbox Code Playgroud)
从JBoss standalone.xml中完全删除了JPA子系统,没有任何成功.
唯一能做到这一点的是在jboss-deployment-structure中排除整个javaee.api,如另一个线程所示
<exclusions>
<module name="javax.persistence.api"/>
<module name="javaee.api"/>
</exclusions>
Run Code Online (Sandbox Code Playgroud)
但这会给我的其余代码带来许多问题.
更新:我的jboss-deployment-structure.xml现在是这样的
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.slf4j" />
<module name="org.slf4j.impl" />
<module name="org.apache.log4j" /> …
Run Code Online (Sandbox Code Playgroud) 我有3个具有ManyToMany关系的实体,如下所示:
角色实体:
@Entity
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer roleID;
private String roleName;
private String description;
@ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, fetch = FetchType.EAGER)
@JoinTable(name = "role_permission", joinColumns = {@JoinColumn(name = "role_id")}, inverseJoinColumns = {@JoinColumn(name = "permission_id")})
private Set<Permission> permissions = new LinkedHashSet<Permission>();
}
Run Code Online (Sandbox Code Playgroud)
许可实体:
@Entity
public class Permission {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int permissionID;
private String permissionName;
private String description;
@ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, fetch = FetchType.EAGER)
@JoinTable(name = "permission_functionality", joinColumns = …
Run Code Online (Sandbox Code Playgroud) jpa-2.0 ×10
hibernate ×6
java ×6
jpa ×3
api ×1
criteria-api ×1
dependencies ×1
eclipse ×1
eclipselink ×1
ejb-3.0 ×1
entity ×1
java-ee ×1
jboss7.x ×1
join ×1
jpa-2.1 ×1
jpql ×1
limit ×1
maven ×1
persistence ×1
spring ×1