Почему я не должен использовать GAC?

Чтобы добиться того, что вы просили, я настроил ваши таблицы следующим образом:

    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;
}

Это сработало хорошо. Я надеюсь, что это помогает.

Найдите здесь ссылку на рабочее решение .

24
задан Community 23 May 2017 в 12:00
поделиться

6 ответов

Chris Sells дает, вероятно лучшая причина предотвращения GAC, где Вы можете:

то, К чему это сводится, - то, что любое из общих мест для обновлений, является ли это COM CLSID, windows\system32 или GAC, опасно и должно избежаться. И это - то, почему предпочтительный сценарий развертывания.NET является "развертыванием xcopy", т.е. наличием Вашей собственной частной копии каждого DLL, который Вы тестируете и развертываете с остальной частью Вашего приложения.

"Ага!" Вы говорите. "GAC поддерживает несколько версия блока! Когда foo.dll обновляется к v1.1, v1.0 находится прямо вдоль стороны его так, чтобы Ваше приложение не делало повреждение!" Конечно, это абсолютно верно. Но если это так, почему Вы заботитесь? Я имею в виду, если существует новый доступный блок, но Ваше приложение не берет его, какое значение он имеет?

"Ага снова!, Вы говорите. "Я могу поместить политику издателя в GAC наряду с моим блоком так, чтобы приложения были обновлены автоматически!" Это правда также, но теперь, как любая из заменяющих стратегий кода всей машины старых, Вы находитесь на рычаге для огромной ответственности: удостоверяясь, что как близко к 0% приложений, известных Вам или нет, не повреждаются. Это - огромная ответственность и та, которая берет MS сотни лет человека при каждом новом выпуске Платформы.NET. И даже с теми сотнями лет человека тестирования, мы все еще не всегда разбираемся в нем. Если это - ответственность за тестирование, с которой Вы готовы жить, я восхищаюсь Вами. Лично, у меня нет моральной силы духа для взваливания на себя этой нагрузки.

45
ответ дан nkr 28 November 2019 в 22:45
поделиться

У нас есть приложение, которое имеет 50 + блоки.NET, загруженные в любой момент времени, и мы не используем GAC. Я думаю, что GAC является самым полезным, если у Вас должно быть несколько версий Вашего приложения, работающего когда-то, каждый из которых должен загрузить различную версию той же общей библиотеки.

Даже затем, если эти две версии приложения находятся в различных каталогах затем, пока Вы сохраняете их двоичные файлы, разделяют Вас, все еще не нуждаются в GAC.

я всегда чувствовал, что это намного более полезно для кого-то, который делает SDK/API, где различные версии их SDK могут быть загружены несколькими приложениями и живые в гармонии. Таким образом, если Вы находитесь в этой лодке затем, GAC может иметь смысл.

существуют некоторые случаи края, которые требуют GAC (я думаю, что компоненты COM +.NET должны быть в GAC в некоторых случаях), но я думаю, что это - небольшой процент случаев.

6
ответ дан Cristi Diaconescu 28 November 2019 в 22:45
поделиться

Если Вы хотите менее навязчивое развертывание своего приложения. Только устанавливая в Вашем каталоге приложения можно скопировать, развертываются и моются очень легко.

3
ответ дан Brian Rasmussen 28 November 2019 в 22:45
поделиться

Если у Вас есть небольшое приложение, которое не является, что интенсивно использующий ресурсы, то я не хотел бы устанавливать файлы в GAC.

Это создало бы другую зависимость, на которую я должен буду проверить в моем удалении и было много горя, выраженного в прошлом о программах, которые злоупотребляют реестром.

Это также было бы немного легче для отладки/обслуживания, в которой Вы могли легко проверить, что все соответствующие библиотеки находятся в исполняемом пути приложения.

2
ответ дан Dillie-O 28 November 2019 в 22:45
поделиться

Я спросил что-то подобное (, я должен когда-либо действительно использовать Глобальный кэш сборок (GAC)? )

лучший ответ был то, что "GAC только полезен при регистрации библиотек, которые Вы собираетесь снова использовать".

, Другими словами, не используют его, если Вы не собираетесь совместно использовать библиотеки между различными приложениями .

2
ответ дан Community 28 November 2019 в 22:45
поделиться

Иногда на размещенных веб-сайтах у вас нет контроля над GAC, и некоторые хостинг-провайдеры не разрешают вам устанавливать какие-либо сборки в GAC. Я сталкивался с этим раньше, и это огромная боль.

1
ответ дан Jon Tackabury 28 November 2019 в 22:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: