dynamicUpdate not working in hibernate

Refresh

December 2018

Views

2.5k time

2

I have a customer table in which there are 3 columns i.e. id,name and age.

If I make a customer object with no age i.e. I don't set any age value, then in case if the same customer(identified by customer id) is present in the table, then saveOrUpdate() updates the age column to 0. I am looking to avoid the age column value to be overwritten by zero or null, if already present in the table.For e.g. as per the code snippet pasted below, if there is already a row exists for the customer id 10 with some age value, then in this case, my age should not be overwritten by zero.

I searched on google and found that I can set dynamicUpdate to true to achieve that. But on executing the code still my age value is overwritten by 0. I am pasting the code snippet

@Entity
@Table(name = "CUSTOMER")
@org.hibernate.annotations.Entity(
        dynamicUpdate = true
)
public class Customer {

    @Id
    @GeneratedValue
    @Column(name = "CUSTOMER_ID")
    private int custId;

    @Column(name = "CUSTOMER_NAME")
    private String custName;

    @Column(name = "CUSTOMER_AGE")
    private int custAge;
        ............
        ...........

       Customer cust = new Customer();
       cust.setCustId(10);
       cust.setCustName("anand");       
       session.saveOrUpdate(cust);      
       tx.commit();

3 answers

1

Во- первых: лучше использовать Integerвместо в intкачестве типа custAge. Таким образом , вы можете сделать различие между пустым и действительным значением 0.

Затем dynamicUpdate = trueполезно для того, что вы пытаетесь сделать, но вы также должны прикрепить объект к сессии (в случае обновления). Например:

customer = session.get(Customer.class, id);
customer.set(...);
session.saveOrUpdate(customer);
0

Динамическое обновление работает только тогда, когда первое мы извлекаем значение с помощью session.get (...) В этом случае предположим, что мы имеем 10 столбцов, и мы хотим обновить 5 столбцов, то сначала мы извлекаем объект, используя идентификатор затем установить новое значение в извлеченный объект и он отлично работает больше мы пишем кодирование только для 5 столбцов и если мы обновляем один столбец из этого 5 колонков затем с помощью динамического огня запроса обновления, как показано ниже

Hibernate: обновление usermaster имя набора =? где user_id =?

Ниже мой код и здесь я поменявшее имя только с переднего конца

Session session = sessionFactory.openSession();
    Transaction tran = session.beginTransaction();
    Usermaster obj = (Usermaster) session.get(Usermaster.class,
            usermaster.getUserId());
    obj.setUsername(usermaster.getUsername());
    obj.setName(usermaster.getName());
    obj.setContact(usermaster.getContact());
    obj.setEmail(usermaster.getEmail());
    obj.setUserStatus(usermaster.getUserStatus());
    obj.setUserType(usermaster.getUserType());
    session.update(obj); 
4

Для того, чтобы dynamicUpdate работы, то прибудут и обновление должны быть в той же самой транзакции.