テーブルが存在しない場合にのみ、休止状態にしてテーブルを作成するにはどうすればよいですか?「hibernate.hbm2ddl.auto」を「update」に設定しただけですが、サーバーの再起動中にエラーが発生します。つまり、エラーは「関係がすでに存在します」のようなものです。
私のpersistence.xml:-
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="com.adwork">
<description>Adwork</description>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<!-- <class>com.mkyong.bean.User</class> -->
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="show_sql" value="true"/>
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/adwork"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/>
</properties>
</persistence-unit>
助けてください。ありがとう
ここにエラーがあります:-
ERROR: org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'applicationStartUp' defined in ServletContext resource [/WEB-INF/spring/root-context.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: com.adwork] Unable to build Hibernate SessionFactory
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:775)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4727)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5189)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:724)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:700)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:596)
at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1805)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: com.adwork] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:877)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:805)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
at com.adwork.survey.config.ApplicationStartUp.initIt(ApplicationStartUp.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1706)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1645)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
... 25 more
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Unable to execute schema management to JDBC target [alter table person add column createdDate timestamp not null]
at org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept(TargetDatabaseImpl.java:59)
at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlString(SchemaMigratorImpl.java:420)
at org.hibernate.tool.schema.internal.SchemaMigratorImpl.applySqlStrings(SchemaMigratorImpl.java:438)
at org.hibernate.tool.schema.internal.SchemaMigratorImpl.migrateTable(SchemaMigratorImpl.java:247)
at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigrationToTargets(SchemaMigratorImpl.java:170)
at org.hibernate.tool.schema.internal.SchemaMigratorImpl.doMigration(SchemaMigratorImpl.java:60)
at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:129)
at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:97)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:481)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:802)
... 36 more
Caused by: org.postgresql.util.PSQLException: ERROR: column "createddate" of relation "person" already exists
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1998)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:570)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:406)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:334)
at org.hibernate.tool.schema.internal.TargetDatabaseImpl.accept(TargetDatabaseImpl.java:56)
... 46 more
私のドメインクラス:-
@Entity
@Table(name = "person")
public class Person implements Serializable
{
/**
*
*/
private static final long serialVersionUID = 5129388836708407722L;
@Id
private Long id;
@OneToOne
@JoinColumn(name = "userId")
private Users user;
@Column(name = "firstName",nullable = false)
private String firstName;
@Column(name = "middleName",nullable = false)
private String middleName;
@Column(name = "lastName",nullable = false)
private String lastName;
@Column(name = "gender",nullable = false)
private String gender;
@Column(name = "dateOfBirth",nullable = false)
private Date dateOfBirth;
@Column(name = "age",nullable = false)
private Byte age;
@Column(name = "createdDate",nullable = false)
private Timestamp createdDate;
@Column(name = "lastUpdatedDate",nullable = false)
private Timestamp lastUpdateDate;
public Person()
{
// TODO Auto-generated constructor stub
}
//and setters / getters
}
DBテーブルスクリプトの作成:-
CREATE TABLE person
(
id bigint NOT NULL,
age smallint NOT NULL,
createddate timestamp without time zone NOT NULL,
dateofbirth date NOT NULL,
firstname character varying(255) NOT NULL,
gender character varying(255) NOT NULL,
lastname character varying(255) NOT NULL,
lastupdateddate timestamp without time zone NOT NULL,
middlename character varying(255) NOT NULL,
userid bigint,
CONSTRAINT person_pkey PRIMARY KEY (id),
CONSTRAINT fkd8ja1o2m8k25sf0mxvhu4c0ti FOREIGN KEY (userid)
REFERENCES users (user_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE person
OWNER TO root;
列名が変更されたテーブル:-
CREATE TABLE person
(
id bigint NOT NULL,
age smallint NOT NULL,
"createdDate" timestamp without time zone NOT NULL,
dateofbirth date NOT NULL,
firstname character varying(255) NOT NULL,
gender character varying(255) NOT NULL,
lastname character varying(255) NOT NULL,
lastupdateddate timestamp without time zone NOT NULL,
middlename character varying(255) NOT NULL,
userid bigint,
CONSTRAINT person_pkey PRIMARY KEY (id),
CONSTRAINT fkd8ja1o2m8k25sf0mxvhu4c0ti FOREIGN KEY (userid)
REFERENCES users (user_id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE person
OWNER TO root;
サーバーを再起動すると、新しいエラーが発生しました:-
Feb 21, 2017 11:26:07 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1572 ms
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/sts-bundle/pivotal-tc-server- developer-3.2.2.RELEASE/base-instance/wtpwebapps/FeePaymentPortal/WEB-INF/lib/slf4j-log4j12-1.6.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/sts-bundle/pivotal-tc-server-developer-3.2.2.RELEASE/base-instance/wtpwebapps/FeePaymentPortal/WEB-INF/lib/slf4j-simple-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
INFO : org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization started
INFO : org.springframework.web.context.support.XmlWebApplicationContext - Refreshing Root WebApplicationContext: startup date [Tue Feb 21 11:26:11 IST 2017]; root of context hierarchy
INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/spring/root-context.xml]
INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/spring/security-context.xml]
INFO : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
WARN : org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000402: Using Hibernate built-in connection pool (not for production use!)
ERROR: org.hibernate.tool.hbm2ddl.SchemaExport - HHH000389: Unsuccessful: alter table role drop constraint FKgg3583634e0ydkacyk8wbbm19
ERROR: org.hibernate.tool.hbm2ddl.SchemaExport - ERROR: relation "role" does not exist
ERROR: org.hibernate.tool.hbm2ddl.SchemaExport - HHH000389: Unsuccessful: alter table user_roles drop constraint FKhfh9dx7w3ubf1co1vdev94g3f
ERROR: org.hibernate.tool.hbm2ddl.SchemaExport - ERROR: relation "user_roles" does not exist
INFO : org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 7665 ms
INFO : org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'appServlet': initialization started
INFO : org.springframework.web.context.support.XmlWebApplicationContext - Refreshing WebApplicationContext for namespace 'appServlet-servlet': startup date [Tue Feb 21 11:26:18 IST 2017]; parent: Root WebApplicationContext
INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/spring/appServlet/servlet-context.xml]
INFO : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/],methods=[GET]}" onto public java.lang.String org.giks.controllers.HomeController.home(org.springframework.ui.ModelMap)
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/payment-month],methods=[GET]}" onto public java.lang.String org.giks.controllers.HomeController.paymentMonth(org.springframework.ui.ModelMap)
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/payment-type],methods=[GET]}" onto public java.lang.String org.giks.controllers.HomeController.paymentMethod(org.springframework.ui.ModelMap)
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/payment-verified],methods=[GET]}" onto public java.lang.String org.giks.controllers.HomeController.paymentVerified(org.springframework.ui.ModelMap)
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/student-fees],methods=[GET]}" onto public java.lang.String org.giks.controllers.HomeController.getStudentFees(org.springframework.ui.ModelMap)
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/student-details],methods=[GET]}" onto public java.lang.String org.giks.controllers.HomeController.getStudentDetails(org.springframework.ui.ModelMap)
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: WebApplicationContext for namespace 'appServlet-servlet': startup date [Tue Feb 21 11:26:18 IST 2017]; parent: Root WebApplicationContext
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: WebApplicationContext for namespace 'appServlet-servlet': startup date [Tue Feb 21 11:26:18 IST 2017]; parent: Root WebApplicationContext
INFO : org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/resources/**] onto handler 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'
INFO : org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'appServlet': initialization completed in 2426 ms
Feb 21, 2017 11:26:21 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 14090 ms
私は信じている主な問題は、PostgreSQLの列名は大文字と小文字は区別されません(と、それはデフォルトで小文字に引用符で囲まれていない列名に変換)ということですが、Hibernateがあります。
たとえば、元のcreateddate
列では次のようになります。
createdDate
、大文字のDを指定します。createddate
小文字のDを使用しています。createdDate
と、ドメインクラスで指定された名前の列を探しますが"createddate" != "createdDate"
、大文字と小文字が区別されるため、列を見つけることができず、列を追加する必要があると考えています。それをしようとします。したがって、オプションは次のとおりです。
ご覧のとおり、テーブルの列名を手動でに変更するとcreatedDate
、最初のエラーが解決されました(したがって、新しいエラーが公開されました)。
新しいエラーについては、「関係...存在しない」、私は全くわからないが、私は考えていること、これは、テーブル名に大文字と小文字の区別の問題に接続されている、あなたはさらに調査する必要があります。少なくとも、それは1つの可能性です。
私はHibernateでPostgreSQLを十分に使用していないので、より簡単なオプションがあるかどうかを知ることができません。たとえば、いくつかの方言オプションや、それらを一緒にうまく機能させるための何かがあります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加