@ElementCollection
не предполагается использовать с коллекциями объектов; он используется с коллекциями @Embeddable
. Если Thing
является сущностью, вы не используете @ElementCollection
, вы используете @OneToMany
.
@ElementCollection
: Определяет коллекцию экземпляров базового типа или встраиваемого класса
Вы можете использовать отображение @OneToMany для установления отношений между пользователем и игровой сущностью.
User.java
@OneToMany(cascade=CascadeType.ALL,fetch= FetchType.LAZY,mappedBy = "user")
private List<Game> games = new ArrayList<>();
//getters and setters
Game.java
@ManyToOne
private User user;
//getters and setters
Вот способ сделать это, это хак/обходной путь, но он работает довольно хорошо. Не стесняйтесь дорабатывать его под свои нужды, ему определенно нужны некоторые проверки на создание символической ссылки или использование папки tmp, чтобы избежать возможных условий гонки (если они проблематичны в вашем случае).
обертка
#!/bin/bash
script="./dummy"
newname="./killme"
rm -iv "$newname"
ln -s "$script" "$newname"
exec "$newname" "$@"
dummy
#!/bin/bash
echo "I am $0"
echo "my params: $@"
ps aux | grep bash
echo "sleeping 10s... Kill me!"
sleep 10
Протестируйте его, используя:
chmod +x dummy wrapper
./wrapper some params
В другом терминале, убейте его, используя:
killall killme
Убедитесь, что вы можете писать в вашей текущей папке (текущий рабочий каталог).
Если ваша текущая команда:
/path/to/file -q --params somefile1 somefile2
Установите переменную script в wrapper на /path/to/file (вместо . /dummy) и вызвать wrapper следующим образом:
./wrapper -q --params somefile1 somefile2
По крайней мере, в Linux killall dvb
работает, хотя dvb
является сценарием оболочки, помеченным #!
. Единственная хитрость состоит в том, чтобы сделать скрипт исполняемым и вызвать его по имени, например,
dvb watch abc write game7 from 9pm for 3:30
Запуск ps
показывает процесс с именем
/usr/bin/lua5.1 dvb watch ...
, но killall dvb
снимает его .
Вы можете использовать команду kill на PID, так что вы можете запустить что-то в фоновом режиме, получить его ID и убить его
PID последнего задания, запущенного в фоновом режиме, можно получить с помощью $!
.
echo test & echo $!
Эмм... если я не ошибаюсь в вопросе, имя сценария оболочки - это то, как вы назвали файл. Если ваш скрипт называется foo
, то killall foo
убьет его.
Насколько мне известно, вы не можете сделать это надежно и портативно. В некоторых разновидностях Unix изменение того, что находится в argv [0], сделает свою работу. Однако я не верю, что в большинстве оболочек есть способ сделать это.
Вот несколько ссылок по теме.