LINUX.ORG.RU

[Hibernate] SQL или Session/QueryOver()?


0

1

С помощью каких средств вы обычно работаете с базой? В частности добавляете или удаляете из нее записи?

Я например, делаю так

Добавление

public void AddUser(string nickName, string password, string PrimaryMail, string userPhoto = null)
        {
            if (!IsDuplicateNickname(nickName))
            {
                var newUser = new User();
                newUser.NickName = nickName;
                newUser.Password = password;
                newUser.PrimaryMail = PrimaryMail;
                newUser.UserPhoto = userPhoto;
                using (var session = ConfigureRepository.SessionFactory.OpenSession())
                {
                    using (var transaction = session.BeginTransaction())
                    {
                        try
                        {
                            session.Save(newUser);
                            transaction.Commit();
                        }
                        catch (HibernateException)
                        {
                            transaction.Rollback();
                        }
                        users.Add(newUser);
                    }
                }
            }
            else throw new DuplicateValueException();
        }

А удаляю так:

public void DeleteUser(string userNickname)
        {
            using (var session = ConfigureRepository.SessionFactory.OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    var user = findUserByName(userNickname);
                    session.Delete(user);
                    users.Remove(user);
                    transaction.Commit();
                }
            }
        }

Кошерно ли это? Нет ли каких ошибок или недочетов?

>Нет ли каких ошибок или недочетов?

Это спрашивает тот кто тупо давит исключения?

_________

//wfrr

anonymous ()

>IsDuplicateNickname

using (var transaction = session.BeginTransaction())

подумай что может произойти в конкуррентном приложении между двумя этими вызовами?

_________

//wfrr

anonymous ()
Ответ на: комментарий от anonymous

Таки да, гонки возможны, но это пока черновой код, так что ваши отзывы очень нам важны.

LongLiveUbuntu ★★★★★ ()

LongLiveUbuntu

Кошерно ли это? Нет ли каких ошибок или недочетов?

нет, некошерно. главный недочет - ЯП.

maloi ★★★★★ ()
Ответ на: комментарий от LongLiveUbuntu

брр, глобальные блокировки.

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

_________

//wfrr

anonymous ()
Ответ на: комментарий от anonymous

Уникальность пользователя по нику проверяется вот здесь

if (!IsDuplicateNickname(nickName))

LongLiveUbuntu ★★★★★ ()
Ответ на: комментарий от LongLiveUbuntu

перечитай мои сообщения... медленнее.

_________

//wfrr

anonymous ()
Ответ на: комментарий от anonymous

> ограничение уникальности по нику

в таблице

Теперь понял. Нужно в базе ввести CONSTRAINT. Спасибо большое.

LongLiveUbuntu ★★★★★ ()

Наш разработчик сначало кипятком ссал от Hibernate теперь говорит что больше в проектах его использовать не будет.

splinter ★★★★★ ()
Ответ на: комментарий от LongLiveUbuntu

> cast nCdy

ненавижу Hibernate )

Наш разработчик сначало кипятком ссал от Hibernate теперь говорит что больше в проектах его использовать не будет.

вот и я считаю, что не нужно )

Но вообще, если работает можно и оставить... хотя я боюсь, что nhibernate это скорее костыль, нежели решение. У меня просто пока ещё мало времени посмотреть ) Если оно будет рабоать на уровне простом и понятном, то можно будет присмотреться к нему.

nCdy ()
Ответ на: комментарий от LongLiveUbuntu

не знаю, я в этом мало шарю, может Apache Cayenne?

splinter ★★★★★ ()
Ответ на: комментарий от nCdy

Будь добра, объявись завтра в джаббере. И да, тест на удаление юзера с сайта уже проходит, но я пока не уверен к добру это или к худу.

Коммиты запушены, так что можешь ознакомиться.

LongLiveUbuntu ★★★★★ ()
Ответ на: комментарий от splinter

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

для случаев RAD, когда поматросил проект и бросил вместе с заказчиком это замечательная хрень.

_________

//wfrr

anonymous ()
Ответ на: комментарий от LongLiveUbuntu

под NET есть якобы совместимый J# на котрый можно портануть с обычной явы, но это мне рассказывали дотнетчики

_________

//wfrr

anonymous ()
Ответ на: комментарий от LongLiveUbuntu

это позитивно, дотнет пробил сраное говно и покатился дальше!

_________

//wfrr

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.