Как я могу поместить аннотации гибернации в поля, но всегда иметь доступ к свойствам?

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

А также потому, что я бы предпочел, чтобы аннотации сопоставления появлялись в верхней части класса, где я объявляю поля.

Интересно, правильный ли этот подход:

@Entity
@Table(name = "test")
// @Access(AccessType.PROPERTY) // cannot use this, because hibernate complains that no 
public class Test implements Serializable
{
  @Id
  // I hope this results in property access for all of the other
  // properties as well, but I am not sure how to confirm this...
  @Access(AccessType.PROPERTY) 
  @Column(name = "id")
  private long                id         = 0;

  @Column(name = "test_string")
  private String              testString = null;

  ...

Обновление: я только что протестировал приведенный выше пример, и похоже, что доступ к свойству testString осуществляется с использованием доступа к полю. Я добавил операторы ведения журнала в геттер/сеттер, и они никогда не вызывались. С другой стороны, когда я добавил @Access(AccessType.PROPERTY) также в поле 'testString', были вызваны методы получения и установки.

Итак, на данный момент мой единственный вариант — написать «@Access(AccessType.PROPERTY)» перед каждым полем :-(


person Reto Höhener    schedule 16.02.2013    source источник


Ответы (1)


1) Доступ к свойствам не является правильным способом сохранения сущностей. Вы сохраняете состояние, а состояние сохраняется в полях.

2) Вы можете использовать аннотацию @Access< /a>, чтобы установить тип доступа, который будет использоваться для класса.

person Ryan Stewart    schedule 16.02.2013
comment
1) кажется, что есть плюсы и минусы, см., например, " title="аннотации гибернации, которые лучше подходят для доступа к полям или свойствам"> stackoverflow.com/questions/594597/. 2) Я не могу использовать @Access для аннотации класса, потому что тогда hibernate жалуется, что для объекта не указан идентификатор. - person Reto Höhener; 17.02.2013
comment
1) Мне известны аргументы в пользу доступа к свойствам. Мое мнение состоит в том, что они ошибаются, потому что игнорируют основной факт, что постоянство связано с состоянием. 2) Возможно, вам придется аннотировать каждый геттер отдельно, чтобы получить доступ к свойству. Документация не очень конкретна в этом область. - person Ryan Stewart; 17.02.2013
comment
2) да, это то, что я сделал до сих пор. Но он распространяет аннотации спящего режима по всему классу. Не говоря уже о том, что мне пришлось сказать генератору кода прекратить генерировать геттеры и поддерживать их самостоятельно... - person Reto Höhener; 17.02.2013