У меня есть объект, который принадлежит объекту клиента.Я хотел бы, чтобы сущность , включая все ассоциации, была бы только для чтения.
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 ....
}
Вот что я хочу:
- Вызывает установщикиfoo не должен сохраняться.
- Вызовы 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 и обработкой транзакций на основе аннотаций.