Hibernate: Как сделать сущность и все ассоциации доступными только для чтения по умолчанию?(или автоматически исключить ассоциацию из сеанса) - PullRequest
0 голосов
/ 31 мая 2018

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

public class Foo{

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "customer_id")
    private Customer customer;

    @Basic
    @Column(name = "firstname")
    private String firstName;

    // getters for both fields ....

}

Вот что я хочу:

  1. Вызывает установщикиfoo не должен сохраняться.
  2. Вызовы myFoo.getCustomer () должны возвращать клиента только для чтения, так что вызовы сеттеров, таких как myFoo.getCustomer (). setSomething ("не должно сохраняться") не должны работать.

Пример:

List<Foo> list = fooDAO.getList();
for (Foo foo : liust) {
  String f1 = foo.getCustomer().getSomeField(); // should work
  foo.getCustomer.setSomeField("change that should not be persisted"); // calling this setter should not have an effect or should even throw an UnsupportedOperationException() or something

  foo.setFirstName("change should not be persisted"); // also this should not be persisted.
}

В настоящее время мое решение для ассоциации является своего рода руководством:

public Customers getCustomer() {
    // detach the referenced object from the Hibernate session
    // to avoid that changes to these association are persisted to the database
    getCustomersDAO().evict(customer); // calls session.evict(o) under the hood
    return customer;
}

Вот мой вопрос: как это сделать?избежать изменений в связях, сохраняемых в базе данных?Например, используя аннотацию?

В общем, я бы хотел, чтобы это поведение было по умолчанию.Но также должно быть возможно позволить изменениям быть сохраненными.Так что мне это нужно настроить.Поэтому я подумал о том, чтобы сделать это на уровне запросов.

Моя среда:

  • Hibernate v3.6
  • Spring 3.2 с HibernateDAOSupport / HibernateTemplate и обработкой транзакций на основе аннотаций.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...