Всем привет! У меня очень странная проблема, буквально час назад у меня все собиралось, но сейчас перестало. Хотя я ничего не менял :(
Суть проблемы: Почему-то начал ловить следующий Stacktrace:
java.lang.NullPointerException
at org.postgresql.jdbc2.AbstractJdbc2DatabaseMetaData.getColumns(AbstractJdbc2DatabaseMetaData.java:2502)
at org.postgresql.jdbc4.AbstractJdbc4DatabaseMetaData.getColumns(AbstractJdbc4DatabaseMetaData.java:99)
at org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.populateTablesWithColumns(InformationExtractorJdbcDatabaseMetaDataImpl.java:350)
at org.hibernate.tool.schema.extract.internal.InformationExtractorJdbcDatabaseMetaDataImpl.getTables(InformationExtractorJdbcDatabaseMetaDataImpl.java:337)
at org.hibernate.tool.schema.extract.internal.DatabaseInformationImpl.getTablesInformation(DatabaseInformationImpl.java:120)
at org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration(GroupedSchemaMigratorImpl.java:65)
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:207)
at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:114)
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:183)
at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:72)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:310)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:467)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708)
at DBLayout.HibernateUtil.getSessionFactory(HibernateUtil.java:25)
at DBLayout.DataLayout.getAllShop(DataLayout.java:17)
at Managers.ShopManager.getAllShop(ShopManager.java:15)
at controllers.controller.getShop(controller.java:21)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:877)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:783)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:866)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:491)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:764)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1388)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:844)
Вот мой синглтон для hibernate :
package DBLayout;
import DataModel.Liquid;
import DataModel.LiquidInShop;
import DataModel.Shop;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static SessionFactory sessionFactory;
private HibernateUtil() {}
public static SessionFactory getSessionFactory() {
if (sessionFactory == null) {
try {
Configuration configuration = new Configuration().configure();
configuration.addAnnotatedClass(LiquidEntity.class);
configuration.addAnnotatedClass(ShopsEntity.class);
configuration.addAnnotatedClass(LiquidsXShopEntity.class);
configuration.addAnnotatedClass(LiquidInShop.class);
configuration.addAnnotatedClass(Liquid.class);
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
sessionFactory = configuration.buildSessionFactory(builder.build());
} catch (Exception e) {
System.out.println("Исключение!" + e);
e.printStackTrace();
}
}
return sessionFactory;
}
}
Вот мои конфиги к нему:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:postgresql://localhost:5432/postgres</property>
<property name="connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL94Dialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="connection.username">postgres</property>
<property name="connection.password">od3FQGcT</property>
<property name="show_sql">false</property>
<mapping class="DBLayout.LiquidEntity"/>
<mapping class="DBLayout.LiquidsXShopEntity"/>
<mapping class="DBLayout.ShopsEntity"/>
<mapping class="DataModel.LiquidInShop"/>
<mapping class="DataModel.Shop"/>
<mapping class="DataModel.Liquid"/>
</session-factory>
</hibernate-configuration>
Вот мой слой бд:
package DBLayout;
import DataModel.Liquid;
import DataModel.LiquidInShop;
import DataModel.Shop;
import org.hibernate.Session;
import org.hibernate.query.Query;
import java.util.ArrayList;
import java.util.List;
import static DBLayout.HibernateUtil.getSessionFactory;
public class DataLayout {
public DataLayout(){
}
public List getAllShop(){
return getSessionFactory().openSession().createQuery("from ShopsEntity ").list();
}
public List getAllLiquid(){
return getSessionFactory().openSession().createQuery("from LiquidEntity ").list();
}
public List getLiquidsFromCurrentShop(String id){
return HibernateUtil.getSessionFactory().openSession().createNativeQuery("select t2.id, t1.shop_id as shopid, t2.company, t2.image, t2.taste, t2.description, t1.nicotine, t1.price , t1.amont" +
" from postgres.public.liquids_x_shop as t1 " +
"inner join postgres.public.liquid as t2 on (t1.liquid_id = t2.id)" +
"where t1.shop_id ="+id , LiquidInShop.class).getResultList();
}
public List getShopsFromCurrentLiquid(String id){
return HibernateUtil.getSessionFactory().openSession().createNativeQuery("select t3.id, t1.shop_id as shopid, t2.company, t3.image, t2.taste, t3.description, t1.nicotine, t1.price, t1.amont " +
"from postgres.public.liquids_x_shop as t1 " +
"inner join postgres.public.liquid as t2 on (t1.liquid_id = t2.id)" +
"inner join postgres.public.shops as t3 on (t1.shop_id = t3.id)" +
"where t1.liquid_id ="+id , LiquidInShop.class).getResultList();
}
public LiquidInShop getLiquidById(String id, String shopid){
return HibernateUtil.getSessionFactory().openSession().createNativeQuery("select t2.id, t1.shop_id as shopid, t2.company, t2.image, t2.taste, t2.description, t1.nicotine, t1.price, t1.amont" +
" from postgres.public.liquids_x_shop as t1 " +
"inner join postgres.public.liquid as t2 on (t1.liquid_id = t2.id)" +
"where t1.shop_id ="+shopid+" and t1.liquid_id ="+id , LiquidInShop.class).getSingleResult();
}
}
Вот моделька:
package DBLayout;
import javax.persistence.*;
@Entity
@Table(name = "shops", schema = "public", catalog = "postgres")
public class ShopsEntity {
private int id;
private String label;
private String image;
private boolean maildeliverly;
private boolean courier;
private int orderminprice;
private String description;
@Id
@Column(name = "id", nullable = false)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Basic
@Column(name = "label", nullable = false, length = 100)
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
@Basic
@Column(name = "image", nullable = false, length = 300)
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
@Basic
@Column(name = "maildeliverly", nullable = false)
public boolean isMaildeliverly() {
return maildeliverly;
}
public void setMaildeliverly(boolean maildeliverly) {
this.maildeliverly = maildeliverly;
}
@Basic
@Column(name = "courier", nullable = false)
public boolean isCourier() {
return courier;
}
public void setCourier(boolean courier) {
this.courier = courier;
}
@Basic
@Column(name = "orderminprice", nullable = false)
public int getOrderminprice() {
return orderminprice;
}
public void setOrderminprice(int orderminprice) {
this.orderminprice = orderminprice;
}
@Basic
@Column(name = "description", nullable = true, length = 300)
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ShopsEntity that = (ShopsEntity) o;
if (id != that.id) return false;
if (maildeliverly != that.maildeliverly) return false;
if (courier != that.courier) return false;
if (orderminprice != that.orderminprice) return false;
if (label != null ? !label.equals(that.label) : that.label != null) return false;
if (image != null ? !image.equals(that.image) : that.image != null) return false;
if (description != null ? !description.equals(that.description) : that.description != null) return false;
return true;
}
@Override
public int hashCode() {
int result = id;
result = 31 * result + (label != null ? label.hashCode() : 0);
result = 31 * result + (image != null ? image.hashCode() : 0);
result = 31 * result + (maildeliverly ? 1 : 0);
result = 31 * result + (courier ? 1 : 0);
result = 31 * result + orderminprice;
result = 31 * result + (description != null ? description.hashCode() : 0);
return result;
}
}
Собственно, когда дергаем getAllShop() со слоя бд, падаю в HibernateUtil, когда пытаюсь создать SessionFactory. Где я свернул не туда?
Похоже, что вы дважды добавляете те же самые классы сущностей в SessionFactory
. Один раз вы указываете в hibernate.cfg.xml
:
<mapping class="DBLayout.LiquidEntity"/>
<mapping class="DBLayout.LiquidsXShopEntity"/>
<mapping class="DBLayout.ShopsEntity"/>
<mapping class="DataModel.LiquidInShop"/>
<mapping class="DataModel.Shop"/>
<mapping class="DataModel.Liquid"/>
а другой раз
configuration.addAnnotatedClass(LiquidEntity.class);
configuration.addAnnotatedClass(ShopsEntity.class);
configuration.addAnnotatedClass(LiquidsXShopEntity.class);
configuration.addAnnotatedClass(LiquidInShop.class);
configuration.addAnnotatedClass(Liquid.class);
выберите, что-то одно.
Используйте hibernate.*
свойства фабрики сессии
<property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/postgres</property>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL94Dialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.connection.username">postgres</property>
<property name="hibernate.connection.password">od3FQGcT</property>
<property name="show_sql">false</property>
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Всем приветУ меня есть некоторые проблемы с коннектом
intellij idea не предлагает мне достать из пакета Util > ConnectionManager, чтобы потом преобразовать в
Проверьте: - в консоли Firebase - DataBase что вы работаете с Realtime Database, а не Cloud Databese; - проверьте в Realtime Database правила чтения и записи, что бы без ограничений...