Как обновлять единственное поле тип Blob таблицы mysql?

Как он мог бы обновлять единственное поле таблицы mysql с hibernate используя sesion.update?

В объекте profile я имею только распределенный id_profile и фотография тип blob.

Только нуждалось в том, чтобы обновить поле фотография больше не другие поля, которые у меня есть в таблице.

Код, что, который я использую:

public static boolean actualizarProfile(Profile profile) {
    Session session = HibernateUtil.getSessionFactory().openSession();


        try{
            session.beginTransaction();     
            session.update(profile);
            session.getTransaction().commit();
            session.disconnect();
            return true;

        }catch (Exception e) {
            System.out.println("Error en el metodo actualizarAccount - " + e.getMessage());
            return false;
        }finally {
            session.disconnect();
        }

}
3
задан 28.09.2016, 18:20
3 ответа

Согласно коду, кажись, что объект Profile profile не будь присоединен (attached) с сеансом Hibernate. Из-за этого, когда ты реализуешь один update то, что сделает Hibernate:

  1. Присоединять объект Profile с настоящей информацией о базе данных.
  2. Делать "смесь" (merge) из объекта, полученного от базы данных и от объекта, который ты посылаешь, показываешь новую стоимость, которая находится в объекте, посланном (в этом случае, твоем объекте profile у которого возможно есть остальные поля в null).
  3. Выполнять соответствующий UPDATE.

Ты можешь проверять, если он действительно обновляет все колонны давая возможность Hibernate, который показывал бы queries, которые он выполняет посредством свойства hibernate.show_sql=true и подтверждать эффект, который я комментирую тебе.

Чтобы решать эту тему, у тебя есть 3 доступных выбора:

  1. Выполнять query, где ты обновил только поле, в котором ты нуждаешься:

    String hql = "UPDATE Profile SET photo = :photo WHERE id = :id";
    int result = session.createQuery(hql)
        .setParameter("photo", profile.getPhoto())
        .setParameter("id", profile.getId())
        .executeUpdate();
    
  2. Получать организацию с Hibernate с Вашей информацией, setear поле, в котором ты нуждаешься, и посылать обновлять это:

    Profile profileDB = session.get(Profile.class, profile.getId());
    profileDB.setPhoto(profile.getPhoto());
    session.update(profileDB);
    

    Несмотря на то, что - меньший код, что предыдущий, - возможно, что эта альтернатива стоит больше времени выполнения, так как он должен получать объект базы данных, что может включать загружать нагруженную фотографию ранее и / или другие объекты, которые присоединены с классом (боль во времени скрытости сервера из-за информации, которая не требуется), добавочной вновь будут становиться отвечающими современным требованиям старые элементы твоего класса

  3. Конфигурировать твой класс для того, чтобы он работал как dynamic-update. Это "прогресс" в предыдущую работу, так как твой предыдущий одинокий объект обновит поля, которые действительно были изменены. Для этого, ты должен менять твой такой класс:

    @Entity
    @org.hibernate.annotations.Entity(
        dynamicUpdate = true
    )
    public class Profile implements java.io.Serializable {
        //fields and other things in your class
    }
    

    Код, чтобы обновлять данные, - идентичен данным формы 2.

1
ответ дан 24.11.2019, 13:16

PodrГ-схвати заставлять это asГ - в час сохранять:

session.merge(profile);

или asГ-:

session.saveOrUpdate(profile);
0
ответ дан 24.11.2019, 13:16
  • 1
    @Luiggi Мендоса я функционировала в perfecci и # 243; n выбор 2. Спасибо. – Mario Garcia 01.10.2016, 21:13

В Hibernate или EclipseLink, изменения будут применимыми к полям, которые окажутся измененными. Он спрашивает у тебя, что у него нет конкретного ответа, просто он:

// photo es un byte[]
profile.setPhoto(photo);
// persistes los datos
hibernate.merge(profile);
0
ответ дан 24.11.2019, 13:16
  • 1
    Осторожно. Возможно, что profile - объект, что не est и # 225; atachado в sesi и # 243; n Hibernate, из-за чего, если он только обладает полями id и photo со стоимостью и dem и # 225; s находятся в null по умолчанию Hibernate обновлять и # 225; все поля. –  28.09.2016, 17:45
  • 2
    #191; происходи tambi и # 233; n в JPA с Hibernate, @LuiggiMendoza? – gugadev 28.09.2016, 18:09
  • 3
    Зависеть и # 225; implementaci и # 243; n, чтобы использовать JPA. Не s и # 233; EclipseLink, потому что я не работаю с и #233; l, но Hibernate s и # 237; я это подтвердил, ты можешь давать возможность hibernate.show_sql и видеть query. Это м и # 225; s, mkyong я написал и # 243; руководитель по этому поводу: mkyong.com/hibernate/hibernate-dynamic-update-attribute-example –  28.09.2016, 18:10
  • 4
    Спасибо за info и соединение. Я буду бросать глаз. – gugadev 28.09.2016, 18:11

Теги

Похожие вопросы