Чтобы добиться того, что вы просили, я настроил ваши таблицы следующим образом:
CREATE TABLE b (
dbid INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY
);
CREATE TABLE a (
b_id int(11) NOT NULL PRIMARY KEY REFERENCES b(dbid) ON DELETE CASCADE
);
CASCADE DELETE
не было добавлено в ваш DDL.
Это включит каскадное удаление. Чтобы удалить запись b
об удалении a
, я сделал следующие изменения в классе A
:
@Entity
@Table(name = "a")
public class A {
@Id
@Column(name = "b_id")
@GeneratedValue(generator = "gen")
@GenericGenerator(name = "gen", strategy = "foreign", parameters = @Parameter(name="property", value="b"))
private Integer bId;
@OneToOne(cascade = CascadeType.REMOVE, orphanRemoval = true)
@PrimaryKeyJoinColumn
private B b;
}
Это сработало хорошо. Я надеюсь, что это помогает.
Chris Sells дает, вероятно лучшая причина предотвращения GAC, где Вы можете:
то, К чему это сводится, - то, что любое из общих мест для обновлений, является ли это COM CLSID, windows\system32 или GAC, опасно и должно избежаться. И это - то, почему предпочтительный сценарий развертывания.NET является "развертыванием xcopy", т.е. наличием Вашей собственной частной копии каждого DLL, который Вы тестируете и развертываете с остальной частью Вашего приложения.
"Ага!" Вы говорите. "GAC поддерживает несколько версия блока! Когда foo.dll обновляется к v1.1, v1.0 находится прямо вдоль стороны его так, чтобы Ваше приложение не делало повреждение!" Конечно, это абсолютно верно. Но если это так, почему Вы заботитесь? Я имею в виду, если существует новый доступный блок, но Ваше приложение не берет его, какое значение он имеет?
"Ага снова!, Вы говорите. "Я могу поместить политику издателя в GAC наряду с моим блоком так, чтобы приложения были обновлены автоматически!" Это правда также, но теперь, как любая из заменяющих стратегий кода всей машины старых, Вы находитесь на рычаге для огромной ответственности: удостоверяясь, что как близко к 0% приложений, известных Вам или нет, не повреждаются. Это - огромная ответственность и та, которая берет MS сотни лет человека при каждом новом выпуске Платформы.NET. И даже с теми сотнями лет человека тестирования, мы все еще не всегда разбираемся в нем. Если это - ответственность за тестирование, с которой Вы готовы жить, я восхищаюсь Вами. Лично, у меня нет моральной силы духа для взваливания на себя этой нагрузки.
У нас есть приложение, которое имеет 50 + блоки.NET, загруженные в любой момент времени, и мы не используем GAC. Я думаю, что GAC является самым полезным, если у Вас должно быть несколько версий Вашего приложения, работающего когда-то, каждый из которых должен загрузить различную версию той же общей библиотеки.
Даже затем, если эти две версии приложения находятся в различных каталогах затем, пока Вы сохраняете их двоичные файлы, разделяют Вас, все еще не нуждаются в GAC.
я всегда чувствовал, что это намного более полезно для кого-то, который делает SDK/API, где различные версии их SDK могут быть загружены несколькими приложениями и живые в гармонии. Таким образом, если Вы находитесь в этой лодке затем, GAC может иметь смысл.
существуют некоторые случаи края, которые требуют GAC (я думаю, что компоненты COM +.NET должны быть в GAC в некоторых случаях), но я думаю, что это - небольшой процент случаев.
Если Вы хотите менее навязчивое развертывание своего приложения. Только устанавливая в Вашем каталоге приложения можно скопировать, развертываются и моются очень легко.
Если у Вас есть небольшое приложение, которое не является, что интенсивно использующий ресурсы, то я не хотел бы устанавливать файлы в GAC.
Это создало бы другую зависимость, на которую я должен буду проверить в моем удалении и было много горя, выраженного в прошлом о программах, которые злоупотребляют реестром.
Это также было бы немного легче для отладки/обслуживания, в которой Вы могли легко проверить, что все соответствующие библиотеки находятся в исполняемом пути приложения.
Я спросил что-то подобное (, я должен когда-либо действительно использовать Глобальный кэш сборок (GAC)? )
лучший ответ был то, что "GAC только полезен при регистрации библиотек, которые Вы собираетесь снова использовать".
, Другими словами, не используют его, если Вы не собираетесь совместно использовать библиотеки между различными приложениями .
Иногда на размещенных веб-сайтах у вас нет контроля над GAC, и некоторые хостинг-провайдеры не разрешают вам устанавливать какие-либо сборки в GAC. Я сталкивался с этим раньше, и это огромная боль.