Одна вещь, которую вы можете сделать со свойствами, которые вы не можете сделать с полями, - это ограничить видимость для сеттера или геттера:
public string MyProperty { get; private set; }
Что-то, что я использую довольно часто.
И что-то (более мощное), которое вы не можете сделать с полями, это определить их внутри интерфейса. Предположим, вы хотите, чтобы интерфейс, который требует реализации классов, имел определенное свойство:
public interface MyInterface
{
string MyProperty { get; }
}
Обратите внимание, что вам не нужен здесь установщик. Это полностью зависит от реализации классов, чтобы определить, как они должны устанавливать MyProperty
.
Это создаст уникальный ключ в базе данных:
@Table( name = "MYTABLE",
uniqueConstraints = { @UniqueConstraint( columnNames = { "NAME", "VERSION" } ) } )
Это будет принудительно выполнено базой данных при обновлении или сохранении.
Вы ' Если вы хотите реализовать это с помощью Hibernate Validator, вам нужно написать свой собственный валидатор.
Обычно мы помещаем два поля во внутренний класс ключа, который помечен как @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
}
}