我正在尝试运行一个spring-boot应用程序,它通过spring-jpa使用hibernate,但是我收到了这个错误:
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:104)
at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:71)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:205)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206)
at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842)
at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:336)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1613)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1550)
... 21 more
Run Code Online (Sandbox Code Playgroud)
我的pom.xml文件是这样的:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.8.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId> …
Run Code Online (Sandbox Code Playgroud) 我熟悉ORM作为一个概念,几年前我甚至将nHibernate用于.NET项目; 但是,我没有跟上Java中的ORM主题,也没有机会使用这些工具.
但是,现在我可能有机会开始为我们的某个应用程序使用一些ORM工具,以试图摆脱一系列遗留Web服务.
我很难说出JPA规范之间的差异,你对Hibernate库本身的看法,以及JDO提供的内容.
所以,我知道这个问题有点开放,但我希望得到一些意见:
我对JPA 2.0 orphanRemoval
属性有点困惑.
当我使用JPA提供程序的数据库生成工具创建底层数据库DDL以获得ON DELETE CASCADE
特定关系时,我想我可以看到它是必需的.
但是,如果数据库存在并且它已经存在ON DELETE CASCADE
关系,那么这还不足以级联删除吗?什么是orphanRemoval
除了做?
干杯
好吧,这个问题几乎说明了一切.使用JPARepository如何更新实体?
JPARepository只有一个save方法,它不会告诉我它是否实际创建或更新.例如,我将一个简单的Object插入数据库User,它有三个字段:firstname和lastname以及age:
@Entity
public class User {
private String firstname;
private String lastname;
//Setters and getters for age omitted, but they are the same as with firstname and lastname.
private int age;
@Column
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
@Column
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
private long userId;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public long getUserId(){
return this.userId;
}
public …
Run Code Online (Sandbox Code Playgroud) 在TopLink JPA Annotation Reference的这些示例中:
例1-59 @OneToMany - 使用泛型的客户类
@Entity
public class Customer implements Serializable {
...
@OneToMany(cascade=ALL, mappedBy="customer")
public Set<Order> getOrders() {
return orders;
}
...
}
Run Code Online (Sandbox Code Playgroud)
例1-60 @ManyToOne - 带有泛型的订单类
@Entity
public class Order implements Serializable {
...
@ManyToOne
@JoinColumn(name="CUST_ID", nullable=false)
public Customer getCustomer() {
return customer;
}
...
}
Run Code Online (Sandbox Code Playgroud)
在我看来,该Customer
实体是该协会的所有者.但是,在mappedBy
同一文档中对属性的解释中,写成:
如果关系是双向的,则将关联的反向(非拥有)侧的mappedBy元素设置为拥有该关系的字段或属性的名称,如示例1-60所示.
但是,如果我没有错,看起来在示例中,mappedBy
实际上是在关联的拥有方指定,而不是非拥有方.
所以我的问题基本上是:
在双向(一对多/多对一)关联中,哪个实体是所有者?我们如何指定一方作为所有者?我们如何指定多方作为所有者?
什么是"关联的反面"?我们怎样才能将一面指定为反面?我们如何将多边指定为反面?
我在我的项目中使用JPA.
我来到一个查询,我需要在五个表上进行连接操作.所以我创建了一个返回五个字段的本机查询.
现在我想将结果对象转换为包含相同五个字符串的java POJO类.
在JPA中是否有任何方法可以直接将该结果转换为POJO对象列表?
我来到以下解决方案..
@NamedNativeQueries({
@NamedNativeQuery(
name = "nativeSQL",
query = "SELECT * FROM Actors",
resultClass = db.Actor.class),
@NamedNativeQuery(
name = "nativeSQL2",
query = "SELECT COUNT(*) FROM Actors",
resultClass = XXXXX) // <--------------- problem
})
Run Code Online (Sandbox Code Playgroud)
现在在resultClass中,我们是否需要提供一个实际的JPA实体类?或者我们可以将它转换为包含相同列名的任何JAVA POJO类吗?
在Hibernate期间Session
,我正在加载一些对象,并且由于延迟加载,其中一些被加载为代理.一切都好,我不想把懒人装完.
但后来我需要通过RPC将一些对象(实际上是一个对象)发送到GWT客户端.碰巧这个具体对象是代理.所以我需要把它变成一个真实的对象.我在Hibernate中找不到类似"实现"的方法.
如何知道他们的类和ID,将一些对象从代理转换为实际?
目前,我看到的唯一解决方案是从Hibernate的缓存中驱逐该对象并重新加载它,但由于许多原因它真的很糟糕.
我有一个Java bean.现在,我想确保该字段应该是唯一的.我使用以下代码:
@UniqueConstraint(columnNames={"username"})
public String username;
Run Code Online (Sandbox Code Playgroud)
但是我收到了一些错误:
@UniqueConstraint is dissallowed for this location
Run Code Online (Sandbox Code Playgroud)
什么是使用独特约束的正确方法?
注意:我正在使用play框架.
在Spring CrudRepository中,我们是否支持字段的"IN子句"?即类似于以下内容?
findByInventoryIds(List<Long> inventoryIdList)
Run Code Online (Sandbox Code Playgroud)
如果没有这样的支持,可以考虑哪些优雅的选择?针对每个id的触发查询可能不是最佳的.
当我的代码发出这样的调用时:
entityManager.find(Customer.class, customerID);
Run Code Online (Sandbox Code Playgroud)
如何查看此调用的SQL查询?假设我没有访问数据库服务器来分析/监控调用,是否可以在我的IDE中记录或查看JPA调用发出的相应SQL查询?我使用jTDS驱动程序反对SQL Server 2008 R2.
jpa ×10
java ×9
hibernate ×5
cascade ×1
jdo ×1
jpa-2.0 ×1
lazy-loading ×1
maven ×1
orm ×1
proxy ×1
spring ×1
spring-boot ×1
spring-data ×1