2016-01-28 2 views
2

В моем текущем приложении я использую Hibernate + PostgreSQL. Для конкретного случая мне нужно использовать функциональность COPY, доступную в postgres для загрузки данных из файла CSV. Есть ли способ использовать COPY с использованием Hibernate.Есть ли способ использовать копию Postgresql (загрузка CSV в таблице) из Hibernate?

Postgres version : 9.4 
Hibernate version : 5.0.6 
+0

Что вы делали до сих пор? – Blaze

+0

Я новичок в Hibernate, поэтому не мог много сделать с Hibernate. Я могу это сделать, используя соединение типа 4 jdbc. Если вы заинтересованы в том, что я могу поделиться этим кодом, однако это не относится к теме –

+2

Hibernate не будет поддерживать это. Но вы можете использовать 'copy from stdin' из JDBC с помощью API' 'CopyManager'' (https://jdbc.postgresql.org/documentation/publicapi/org/postgresql/copy/CopyManager.html). См. здесь: http://stackoverflow.com/questions/33648947/how-to-indicate-a-session-instance-to-postgresql-copymanager –

ответ

3

на основе @ а-лошадь-с не имя комментария, я соединял следующий код как session.doWork осуждается.

SessionFactory factory = HibernateUtil.getSessionFactory(); 
Session session = factory.openSession(); 
SessionImplementor sessImpl = (SessionImplementor) session; 
Connection conn = null; 
conn = sessImpl.getJdbcConnectionAccess().obtainConnection(); 
CopyManager copyManager = new CopyManager((BaseConnection) conn); 
File tf =File.createTempFile("temp-file", "tmp"); 
String tempPath =tf.getParent(); 
File tempFile = new File(tempPath + File.separator + filename); 
FileReader fileReader = new FileReader(tempFile); 
copyManager.copyIn("copy testdata (col1, col2, col3) from STDIN with csv", fileReader); 

Надеюсь, это поможет читателям.