2016-03-14 6 views
0
проект

My Maven необходимо загрузить данные в базу данных, и import.sql содержит следующее:Как указать относительный путь к файлу в стандартном проекте Maven

LOAD DATA LOCAL INFILE 
`'/home/jack/ubuntu/bword/src/main/resources/Term.txt' INTO TABLE Term FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' (id,name);` 

Путь, используемый здесь абсолютный путь на моей машине , Как указать относительный путь, чтобы он работал? Я пробовал:

/bword/src/main/resources/Term.txt 
../bword/src/main/resources/Term.txt 
../bword/src/main/resources/Term.txt 
../src/main/resources/Term.txt 

Ни одна из этих работ не работает. Файл находится по адресу src/main/resources, каталог по умолчанию в каталоге Maven.

Я использую JBoss и спящий режим, JPA.

+0

Что потребляющего этот файл? плагин maven (какой?) основной Java? тест? –

+0

На самом деле, я точно не знаю. Я думаю, что это поглощено Java Persistence API и Hibernate, так как я использую эти API для доступа к базе данных mysql. По соглашению import.sql будет выполняться автоматически при запуске веб-приложения, а Hibernate создаст базу данных и заполнит данные. – user697911

+0

Хорошо, тогда файл будет использоваться вашим приложением, а не Maven, не было бы понятия 'src/main/resources', вы можете удалить его, попробуйте просто с'/Term.txt' тогда (означает: at корень пути к классам) –

ответ

0

ИМХО, вы не можете этого сделать.

Ваша заявка является веб-приложением (Я смотрю по чату). Maven может упаковать import.sql и Term.txt в приложение. Оба файла видны в пути к классам. Hibernate просматривает путь к классам, находит import.sql и выполняет его.

import.sql Но когда будет продолжаться, команда

LOAD DATA LOCAL INFILE 'file_name' ... 

выполняется. 'file_name' разрешен против текущей рабочей директории.

  1. Term.txt видна в файловой системе? Я так не думаю.
  2. Выполняет ли приложение управление текущим каталогом процесса JBoss? Нет

Резюме:

  1. Term.txt не видно как файл на JBoss файлового
  2. LOAD DATA LOCAL INFILE необходим файл на JBoss файлового
+0

«LOAD DATA LOCAL INFILE нужен файл в файловой системе JBoss», можно ли это сделать? – user697911

+0

Разве это не распространенный сценарий, или редко люди загружают данные в базу данных Hibernate таким образом? – user697911

+0

Основная цель Hibernate - отображение JPA. 'import.sql' является надстройкой - полезная, но не основная функция. Загрузка базы данных не является тривиальным случаем из-за невосприимчивости.Flywaydb - один из инструментов для заполнения базы данных. Другое, простое решение - это преобразовать 'Term.txt' во многие команды вставки sql, записать их в файл и выполнить файл с помощью Hibernate (hibernate может загружать много файлов при запуске: http://stackoverflow.com/a/27709692/2365727) – michaldo

Смежные вопросы