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

Одна вещь, которую вы можете сделать со свойствами, которые вы не можете сделать с полями, - это ограничить видимость для сеттера или геттера:

public string MyProperty { get; private set; }

Что-то, что я использую довольно часто.

И что-то (более мощное), которое вы не можете сделать с полями, это определить их внутри интерфейса. Предположим, вы хотите, чтобы интерфейс, который требует реализации классов, имел определенное свойство:

public interface MyInterface
{
    string MyProperty { get; }
}

Обратите внимание, что вам не нужен здесь установщик. Это полностью зависит от реализации классов, чтобы определить, как они должны устанавливать MyProperty.

24
задан Jens Schauder 4 May 2015 в 18:05
поделиться

2 ответа

Это создаст уникальный ключ в базе данных:

@Table( name = "MYTABLE",
        uniqueConstraints = { @UniqueConstraint( columnNames = { "NAME", "VERSION" } ) } )

Это будет принудительно выполнено базой данных при обновлении или сохранении.

Вы ' Если вы хотите реализовать это с помощью Hibernate Validator, вам нужно написать свой собственный валидатор.

41
ответ дан 28 November 2019 в 23:25
поделиться

Обычно мы помещаем два поля во внутренний класс ключа, который помечен как @Embeddable. Например:

@Entity
public class Foo {

  @EmbeddedId()
  private Key key;
  ...

  @Embeddable
  public static class Key {
    @Column(nullable=false)
    private String name;
    @Column(nullable=false)
    private int version;

    protected Key () {
      // for hibernate
    }
    public Key (String name, int version) {
      this.name = name;
      this.version = version;
    }
    ...
    // You probably want .equals and .hashcode methods
  }
}
4
ответ дан 28 November 2019 в 23:25
поделиться
Другие вопросы по тегам:

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