Nano Hash - криптовалюты, майнинг, программирование

уникальное ограничение hibernate

Я столкнулся с проблемой ниже а>

P.S. Посмотрите комментарии :) по ссылке выше

И при ее решении у меня теперь возник вопрос о том, как уникальное ограничение реализовано в спящем режиме, я начал верить, что он запускает запрос на выборку (я не уверен в этом), а затем «каким-то образом» выполняет проверку.

меня не очень убедило объяснение

15.05.2011

  • Пожалуйста, включите основные моменты приведенной ниже проблемы, чтобы этот пост был автономным. 01.09.2018

Ответы:


1

Hibernate создает «уникальный» индекс для этого столбца, и именно база данных затем обеспечивает уникальность.

Например, если у вас есть класс:

@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class UserEmailAddressEntity {
    @Id
    @Basic(optional = false)
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Basic(optional = false)
    private boolean primaryEmail;

    @ManyToOne(optional = false)
    private UserEntity user;

    @NaturalId // this means the email column must be unique
    @Basic(optional = false)
    private String email;

    @Basic(optional = false)
    private String token;

    @Basic(optional = false)
    private boolean verified;
}

Hibernate создает такую ​​таблицу: (для PostgreSQL, но идея одинакова практически для всех СУБД)

CREATE TABLE useremailaddressentity
(
  id bigint NOT NULL,
  email character varying(255) NOT NULL,
  primaryemail boolean NOT NULL,
  token character varying(255) NOT NULL,
  verified boolean NOT NULL,
  user_id bigint NOT NULL,
  CONSTRAINT useremailaddressentity_pkey PRIMARY KEY (id),
  CONSTRAINT fk279a5e06c843ec30 FOREIGN KEY (user_id)
      REFERENCES userentity (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,

  -- note the `UNIQUE` here:
  CONSTRAINT useremailaddressentity_email_key UNIQUE (email)
)
15.05.2011
  • Я так и думал, однако, если вы посмотрите комментарии к данной ссылке, вы увидите, что, когда у меня было уникальное ограничение на .. hibernate, запускался запрос на session.save(entity) , который он не запускал, когда Я снял ограничение, есть мысли по этому поводу? 15.05.2011
  • Я пытался воссоздать это поведение локально, но мне не повезло, извините :( Даже с уникальным ограничением выполняется прямая вставка (для новых сущностей) или обновление (при... обновлении) 16.05.2011

  • 2

    Я попытался воспроизвести это поведение, используя Grails 1.3.7, и обнаружил, что оно воспроизводимо.

    class Child {
        String name
        static constraints = { name(unique:true) }
    }
    
    table created 
    CREATE TABLE `child` (
      `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(255) NOT NULL,  
      PRIMARY KEY  (`id`),
      UNIQUE KEY `name` (`name`)
    )
    

    Запросы, запущенные на child.save()

    Hibernate: select this_.id as id0_0_, this_.version as version0_0_, this_.created_by as created3_0_0_, this_.date_created as date4_0_0_, this_.last_updated as last5_0_0_, this_.name as name0_0_, this_.updated_by as updated7_0_0_ from child this_ where this_.name=?
    Hibernate: insert into child (version, created_by, date_created, last_updated, name, updated_by) values (?, ?, ?, ?, ?, ?)
    

    Причина, по которой я думаю, что спящий режим запускает вышеуказанный запрос, заключается в проверке уникального ограничения. И в случае, если вы пытаетесь выполнить обновление, этот запрос приведет к тому, что в памяти будет другой объект с тем же идентификатором, что может привести к неуникальному объектному исключению.

    Я думаю, что это спящий режим, а не Грааль, дважды не проверял это в java/hibernate.

    Спасибо

    20.05.2011
  • Может ли кто-нибудь подтвердить, характерно ли это поведение для Grails, я не вижу подобного поведения при использовании @UniqueConstraints 29.06.2011
  • Это специфично для Grails. И очень сомнительно (уникальность может одновременно меняться между проверкой SQL и фиксацией tx) 01.10.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..