我有以下代码片段用于构建条件生成器的条件。
想知道是否有任何方法可以使其更好,因为我将有更多的条件和相同的条件将用于获取记录计数。
任何见解都是非常值得赞赏的
private List <Product> getProducts(MultivaluedMap params) throws JSONException {
CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
CriteriaQuery <Product> criteriaQuery = criteriaBuilder.createQuery(Product.class);
Root <Product> root = criteriaQuery.from(Product.class);
List <Predicate> p = new ArrayList <Predicate> ();
Predicate prodIdPredicate, prodNamePredicate;
JSONObject inputJSON = new JSONObject(params);
if (inputJSON.isNull("filter") == false) {
JSONObject filter = inputJSON.getJSONObject("filter");
JSONArray filters = filter.getJSONArray("filters");
for (int i = 0; i < filters.length(); i++) {
JSONObject j = (JSONObject) filters.get(i);
if (j.getString("field").equals("prodId")) {
prodIdPredicate = criteriaBuilder.like(root.get(Product_.prodId), j.getString("value"));
p.add(prodIdPredicate);
}
if (j.getString("field").equals("prodName")) …
Run Code Online (Sandbox Code Playgroud) 我的项目中有以下两个存储库类。
@Repository
public interface AuditRepository extends MongoRepository<AuditEntity, String> {
}
Run Code Online (Sandbox Code Playgroud)
还有一种具有更复杂的查询。
@Service
public class AuditCriteriaRepository {
private final MongoTemplate mongoTemplate;
public AuditCriteriaRepository(MongoTemplate mongoTemplate){
this.mongoTemplate = mongoTemplate;
}
public List<AuditEntity > getAuditEntitiesByStatus(AuditStatus auditStatus, Instant instant){
Query query = new Query();
query.addCriteria(Criteria.where("status")
.is(auditStatus)
).addCriteria(Criteria.where("createdAt").lt(instant));
return mongoTemplate.find(query, AuditEntity.class);
}
}
Run Code Online (Sandbox Code Playgroud)
我现在遇到的问题是它们是作为单独的类自动连接的,如果我可以将两者合并为一个存储库类,我会更愿意,这样我就可以拥有默认的 CRUD 选项并构建标准选项。
关于如何做到这一点有什么建议/提示吗?
我有这个代码
@Column(updatable=false)
@Enumerated(EnumType.STRING)
private ExamType examType;
Run Code Online (Sandbox Code Playgroud)
但是,当我通过合并更新它时,我仍然可以更改该值.为什么?
我尝试构建简单的应用程序,我想使用spring,wicket和JPA2.0(Hibernate).把所有这些放在一起我使用maven.我有hibernate的问题.下面是我的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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>comicsTest</groupId>
<artifactId>comicsTest</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<repositories>
<repository>
<id>jboss-public-repository-group</id>
<name>JBoss Public Repository Group</name>
<url>https://repository.jboss.org/nexus/content/repositories/releases/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.0.5.RELEASE</version>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>wicket</groupId>
<artifactId>wicket</artifactId>
<version>1.2.7</version>
</dependency>
<dependency>
<groupId>wicket</groupId>
<artifactId>wicket-spring</artifactId>
<version>1.2.7</version>
</dependency>
<dependency>
<groupId>wicket</groupId>
<artifactId>wicket-extensions</artifactId>
<version>1.2.7</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>3.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hiberante</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.0.Final</version>
</dependency>
</dependencies>
<modules>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
Run Code Online (Sandbox Code Playgroud)
而我得到的只是
27.12.10 12:41:44 CET: Refreshing [/comicsTest/pom.xml]
27.12.10 12:41:48 CET: Downloaded …
Run Code Online (Sandbox Code Playgroud) 我使用Spring 3.0.5.RELEASE和Hibernate 3.6.1.Final.从MySql DB读取是可以的,但是当我尝试写入它时,我在日志中得到了这个:
22 mars 2011 22:37:34,625 DEBUG InjectionMetadata: Processing injected method of bean 'thoughtDao': PersistenceElement for protected javax.persistence.EntityManager com.prosveta.backend.daoimpl.GenericDaoImpl.entityManager
22 mars 2011 22:37:34,625 DEBUG DefaultListableBeanFactory: Returning cached instance of singleton bean 'entityManagerFactory'
22 mars 2011 22:37:34,625 DEBUG DefaultListableBeanFactory: Creating shared instance of singleton bean 'org.springframework.transaction.config.internalTransactionAdvisor'
22 mars 2011 22:37:34,625 DEBUG DefaultListableBeanFactory: Creating instance of bean 'org.springframework.transaction.config.internalTransactionAdvisor'
22 mars 2011 22:37:34,640 DEBUG DefaultListableBeanFactory: Eagerly caching bean 'org.springframework.transaction.config.internalTransactionAdvisor' to allow for resolving potential circular references
22 mars 2011 22:37:34,656 DEBUG …
Run Code Online (Sandbox Code Playgroud) 我很擅长在企业应用程序中使用ORM工具.我们正在构建一个使用JPA 2.0和EE6的可扩展应用程序.我正在尝试找到一个很好的模式来构建我的应用程序,但我找不到一种方法来保持我的实体同步(我想集合访问实体的bean).
一个例子:
我有一个小组:
@Entity
public class Group implements Serializable
{
@Id
private Long id;
@OneToMany
private List<MyUser> myUsers;
public Group()
{
}
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
public void addUser(MyUser u)
{
myUsers.add(u);
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个用户
@Entity
public class MyUser implements Serializable
{
@Id
private Long id;
public MyUser()
{
}
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
} …
Run Code Online (Sandbox Code Playgroud) 以 Hibernate 作为提供者。
在性能(或其他)方面,哪种类型的参数更适合使用? 和为什么?
位置的
TypedQuery<Client> query = em.createQuery
("FROM Client c WHERE c.clientId = ?1",Client.class);
query.setParameter(1, clientId);
Run Code Online (Sandbox Code Playgroud)
或命名
TypedQuery<Client> query = em.createQuery
("FROM Client c WHERE c.clientId = :clientId",Client.class);
query.setParameter("clientId", clientId);
Run Code Online (Sandbox Code Playgroud) 我在 java 中收到此错误消息。
你们中有人知道我该如何解决这个问题吗?
HTTP Status 500 - Filter execution threw an exception
类型 Exception report
信息 Filter execution threw an exception
描述 The server encountered an internal error that prevented it from fulfilling this request.
例外
javax.servlet.ServletException: Filter execution threw an exception
root cause
java.lang.Error: Unresolved compilation problem:
The method createNamedQuery(String) in the type EntityManager is not applicable for the arguments (String, Class<User>)
bg.tu_sofia.cinema.dao.UserDAOImpl.getAllUsers(UserDAOImpl.java:22)
bg.tu_sofia.cinema.dao.UserDAOImpl.usernameExists(UserDAOImpl.java:52)
bg.tu_sofia.cinema.filters.UserReconcilerFilter.doFilter(UserReconcilerFilter.java:54)
note The full stack trace of the root cause is available in the …
Run Code Online (Sandbox Code Playgroud) 我正在使用GlassFish 3.1.2.2(由于操作系统限制,我无法升级到4).
我有兴趣将JPA 2.0升级到JPA 2.1 GlassFish 3.1.2.2.我怎样才能做到这一点?
我想使用JPA的CriteriaBuilder根据下面的SQL语句选择前10条记录.
SELECT * from RECORDTABLE rt
where rt.LASTUPDATED > startDate
and rt.LASTUPDATE < endDate
order by rt.TOTALNUMBER asc;
Run Code Online (Sandbox Code Playgroud)
到目前为止,我在日期之间使用了谓词.
我有一个普通的模型类
public class Person {
private int id;
private String name;
...
}
Run Code Online (Sandbox Code Playgroud)
它是一个模型类,没有使用任何JPA/Hibernate注释.
有可能以某种方式告诉Hibernate使这个类持久化吗?
我想Person
在查询,条件等中使用,但不想在该类中引入注释(它在没有JPA依赖的模型JAR中定义,并且我在不同的JAR中使用了DB代码);
jpa-2.0 ×11
java ×7
hibernate ×4
jpa ×3
jakarta-ee ×2
criteria-api ×1
eclipselink ×1
glassfish ×1
glassfish-3 ×1
java-ee-6 ×1
json ×1
maven ×1
mongodb ×1
mysql ×1
orm ×1
persistence ×1
spring ×1
spring-boot ×1
sql ×1
stateless ×1