我有两个persistenceUnits映射到两个不同的Oracle模式,这些模式是相似的,但表名不同。当我尝试部署应用程序时,我得到一个Hibernate异常“Missing table”,这似乎是Hibernate在错误的PersistenceUnit中查找表。
.ear#POIPersistenceUnit\“:org.hibernate.hibernateException:丢失表:POI_SERVICE原因:org.hibernate.hibernateException:丢失表:POI_SERVICE”}}
表“POI_Service”属于“POIExtractorPersistenceUnit”persistenceUnit而不是“POIPersistenceUnit”persistenceUnit
我尝试在persistence.xml文件中列出具有相应persistenceUnits的实体,如下所示,但没有成功,仍然得到相同的错误。
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="POIExtractorPersistenceUnit">
<jta-data-source>java:/XAPOIExtractorDS</jta-data-source>
<class>za.co.fnb.cii.poiextractor.persistence.model.IdentificationRequest</class>
<class>za.co.fnb.cii.poiextractor.persistence.model.IdentificationResponse</class>
<class>za.co.fnb.cii.poiextractor.persistence.model.POIService</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.archive.autodetection" value="class" />
<property name="hibernate.flushMode" value="FLUSH_AUTO" />
<property name="hibernate.hbm2ddl.auto" value="validate" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
<persistence-unit name="POIPersistenceUnit">
<jta-data-source>java:/XACompendiumDS</jta-data-source>
<class>za.co.fnb.cii.poiextractor.persistence.entities.IdentificationRequestIncoming</class>
<class>za.co.fnb.cii.poiextractor.persistence.entities.IdentificationResponseIncoming</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.archive.autodetection" value="class" />
<property name="hibernate.flushMode" value="FLUSH_AUTO" />
<property name="hibernate.hbm2ddl.auto" value="validate" />
<property name="hibernate.show_sql" value="false" />
</properties>
</persistence-unit>
我还尝试如下方式对实体进行注释@PersistenceUnit(unitName=“PoIExtractorPersistenceUnit”)
,但仍然没有成功,错误仍然存在。
/**
* Created by on 21-Dec-15.
*/
@Entity
@Table(name = "POI_SERVICE")
@PersistenceUnit(unitName = "POIExtractorPersistenceUnit")
@NamedQueries({
@NamedQuery(name="findServiceRecordByApplicationName",
query="SELECT pois FROM POIService pois WHERE pois.application = :applicationName")
})
public class POIService implements IEntity{
@Id
@GeneratedValue(generator="service_config_seq")
@SequenceGenerator(name="service_config_seq", sequenceName="service_config_seq", allocationSize=1)
private long id;
private String application;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "last_update",nullable = false)
private Date lastUpdate;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "last_date",nullable = true)
private Date lastDate;
@Column(name = "last_record",nullable = true)
private long lastRecord;
@Override
public long getId() {
return id;
}
public String getApplication() {
return application;
}
public void setApplication(String application) {
this.application = application;
}
public Date getLastUpdate() {
return lastUpdate;
}
public void setLastUpdate(Date lastUpdate) {
this.lastUpdate = lastUpdate;
}
public Date getLastDate() {
return lastDate;
}
public void setLastDate(Date lastDate) {
this.lastDate = lastDate;
}
public long getLastRecord() {
return lastRecord;
}
public void setLastRecord(long lastRecord) {
this.lastRecord = lastRecord;
}
}
更新:
堆栈跟踪
更新2:当我从persistence.xml中移除这个属性时,一切正常。
<property name="hibernate.hbm2ddl.auto" value="validate" />
一个JPAEntityManager
属于一个持久性单元,或者EntityManagerFactory
,您不能将多个持久性单元与同一个EntityManager
混合使用。
但你不必那么做。
您可以有一个单一的持久性单元,并在映射实体时使用schema
属性。
问题内容: 我有一个java.sql.Blob的JPA实体: 如何创建该实体的实例?我想设置与方法,但如何让从JPA?只是接口,对于不同的数据库有不同的实现,因此我认为JPA应该给我正确的实现。如何获得? 问题答案: 使用字节数组: 如果要使用流,请使用以下命令创建Blob:
我正在使用Postgres10.8、Java8和Spring Boot2.1.9 with Data JPA来映射我的实体和我的数据库表。在我的数据库中,我对表进行了分区,并使用了继承策略。 我的结构是这样的: 我的实体: 我认为问题可能是由于将数据重定向到子表中插入的触发器引起的,而Spring data不识别它。 有办法修好吗?
我有个问题。当我有其他实体时,我不知道如何创建API。我与邮递员工作,当我做一个请求,以看到所有项目从数据库,我想收到实体也。 例如,这是我的实体:
问题内容: 我有两个实体,它在哪里取决于表中的另一个外键。 我要完成的工作是拥有一个in,这样每当我有一个实体对象时,我都可以从语言ID访问所有描述。 实体 Car.java 实体 CarDescription.java 实体 语言.java 我遇到的问题是映射为我提供了从到的映射。 如何完成正确的映射? 问题答案: 在您需要添加属性: 然后,您可以像这样在实体中使用它:
对于新学生和新课程的情况,它工作得很好,但是在新课程和现有学生的情况下,我会从数据库中抛出一个唯一的约束冲突。关系类似于下面。 在持久化之前,我尝试使用entitymanager查找一个学生,如果该学生存在,则使用该实例而不是新的学生实例。这也不起作用,它仍然尝试执行插入而不是更新
我已经在数据库中保存了一个JPA实体。 我想拥有它的副本(具有不同的id),并修改了一些字段。 最简单的方法是什么?例如: 将它的字段设置为并持久化它会起作用吗? 我是否必须为实体创建一个克隆方法(复制除之外的所有字段)? 还有其他方法吗(比如使用克隆框架)?