Я нашел эту конкретную заметку в сеансе 9.1.9 Аннотацию GeneratedValue из спецификации JPA: «[43] Портативные приложения не должны использовать аннотацию GeneratedValue для других постоянных полей или свойств». Поэтому я предполагаю, что невозможно автоматически генерировать значение для значений не первичного ключа, по крайней мере, используя просто JPA.
Типичный способ справиться с этим - загрузить базовые свойства из встроенного файла и позволить пользователям приложения указать дополнительный файл с переопределениями. Какой-то псевдокод:
Properties p = new Properties();
InputStream in = this.getClass().getResourceAsStream("c.properties");
p.load(in);
String externalFileName = System.getProperty("app.properties");
InputStream fin = new FileInputStream(new File(externalFileName));
p.load(fin);
Ваша программа будет вызываться примерно так:
java -jar app.jar -Dapp.properties="/path/to/custom/app.properties"
Сначала сохраните свойства по умолчанию в вашем файле свойств, который упакован в банку. Когда приложение запускается, попробуйте прочитать файл свойств с тем же именем из некоторого местоположения по умолчанию в файловой системе, предпочтительнее домашняя папка пользователя, которую вы можете получить с помощью System.getProperty("user.home");
. Если файл существует в файловой системе, загрузите его, если он не существует, загрузите упакованный файл свойств и запишите копию в файловую систему.
Таким образом, если имя вашего файла свойств - myprops.properties
, изначально его будет содержать только ваш jar-файл. Когда приложение запускается, оно проверит, существует ли файл /home/xyz/myprops.properties
. Поскольку это не так, он будет читать файл упакованных свойств и записывать копию в файл /home/xyz/myprops.properties
. Со следующего раза он будет читать из /home/xyz/myprops.properties
.
Почему бы не передать местоположение файла свойств в качестве аргумента командной строки (после флага)? если его нет, используйте файл по умолчанию в jar-файле.
Вы загружаете файл свойств из пути к классам. Я бы предложил что-то вроде этого: