В Hibernate классы, на которые мепятся таблички, являются serializable
Захочешь - будут, а по умолчанию - нет. Имхо, никаких препятствий.
Захочешь - будутесли очень захотеть можно в космос полететь, вопрос в том насколько это просто и предусмотрено ли в идеологии Hibernate?
вопрос в том насколько это просто и предусмотрено ли в идеологии Hibernate?В некотором смысле это предусмотрено, так как Hibernate лучше всего работает с POJO (Plain Old Java Object которые обычно обладают конструктором без аргументов, а интерфейс java.io.Serializable как раз требует наличия такого конструктора.
А вообще, если такого конструктора не хочется, никто не мешает тебе добавить методы writeObject и readObject.
P.S. Если в чём ошибаюсь, поправьте меня.
ну как, пишешь implements Serializable, и полетел =)
Гм, а что такого страшного в объявлении класса как Serializable?
Тема такая, что если Hibernate вызовы идут через RMI, то классы ОБЯЗАНЫ быть сериализуемыми насколько мне известно.
У тебя Hibernate как используется?
Hibernate вызовы идут через RMIчегоооо?
Ну типа ты прав. Если тебя Hibernate вызовы идут через RMI, то объекты должны быть сериализуемыми. Только придется заодно тогда и Session, и Query сделать сериализуемыми.
Session, и Query сделать сериализуемыми.я даже Java толком не знаю (программирую на .Net тем белее Hibernate, но я предполагаю, что Session хранит соединение с базой, но в 3-х звенной архитектуре клиент не имеет соединение с базой
p.s. извиняюсь, если мое предположение не верно
можно ли объекты-сущности Hibernate передавать через RMI? кто-нибудь так делал?
если Hibernate вызовы идут через RMIМожно тут поподробнее? Как и куда, а главное, зачем hibernate вызовы идут через RMI?
Как и куда, а главное, зачем вызовы идут через RMI?на сколько я понимаю, hibernate создает коллекции объектов на основе данных из базы. Эти коллекции требуется передать на удаленного клиента.
я даже Java толком не знаю (программирую на .Netну вот зачем тебе в таком случае сдался этот Hibernate? Я серьезно. Дальше будет только хуже.
Информация к размышлению: хибернейтовские коллекции могут существовать только в области действия сессии.
поясни плз, что в твоем понимании "хибернейтовские коллекции"?
Хибернейтовские коллекции - см. раздел Collection Mapping в документации.
Hibernate collections отлично живут и без живой сессии (они становятся transient объектами потому как "generally, session reperesents single unit of work", т.е. сессию открыл, почитал/пописАл ей, и закрываем, потому как сессия строится на java.sql.Connection, а их в пуле все-таки ограниченное число. Рекомендовано почитать про Second-level Hibernate cache и вообще про архитектуру Hibernate. Если объекты не lazy-initialized, то вопрос с колекцией и сессие сам по себе отпадает.
Далее относительно сериализуемости сессии - "A Session instance is serializable if its persistent classes are serializable". RTFM JavaDoc!
В Hibernate классы, на которые мепятся таблички, являются serializableВ hibernate, кстати, все происходит совсем наоборот - объекты мапятся на таблички, более того, на тему структуры БД можно не парится, потому как есть стандартный anttask для генерации структуры базы по маппингам.
Только обязательно прочитать вот эту главу, чтобы уяснить обращение хибернейта с сущностями в разных сессиях.
относительно сериализуемости сессиичто-то я не понял нафига вообще нужна сериаизуемость сессии... передавать удаленному клиенту хибернейтовскую сессию чтобы он там с ней работал? ето ж бред
Если объекты не lazy-initialized, то вопрос с колекцией и сессие сам по себе отпадает.Про это я и говорю. Если у тебя этот вопрос отпадает, считай, что тебе повезло.
A Session instance is serializable if its persistent classes are serializableКак это ты себе семантику сериализации сессии представляешь?
на тему структуры БД можно не парится, потому как есть стандартный anttask для генерации структуры базы по маппингамугу, тока это в идеальном мире... обычно структура уже есть, и как раз надо париться чтобы положить на нее свои бизнес-объекты... хотя и для этого есть тулзы, вопрос тока в том как они работают :-\
это не говоря уже о том что структура бд все-таки должна считаться с общим перфомансом системы.
Только обязательно прочитать вот эту главу, чтобы уяснить обращение хибернейта с сущностями в разных сессияхразделение объектов между сессиями? transient and persistent objects? ну там все не очень заморочено, я бы даже сказал, все более или менее логично. Гораздо дольше заморочек там в наследованием (особенно множественым) и lazy loading.
Про это я и говорю. Если у тебя этот вопрос отпадает, считай, что тебе повезлоПочитай, что я до этого писал. Даже если объекты lazy, все работатет хорошо, поверь.
Как это ты себе семантику сериализации сессии представляешьЕсли кэш первого уровня (сессионный) сериализуется, то и вся сессия сериализуется. А кэш сериализуется тогда, когда все объекты в нем сериализуются. Элементарно. Хотя, возможно, я не очень понял значение слова "семантика" в данном контексте.
хотя и для этого есть тулзыMiddleGen например. Рабоатет без особых проблем афаик.
Даже если объекты lazy, все работатет хорошо, поверь.Если есть ассоциированная открытая сессия - работает, я и не спорю.
Если кэш первого уровня (сессионный) сериализуется, то и вся сессия сериализуется. А кэш сериализуется тогда, когда все объекты в нем сериализуются. Элементарно.Для начала, представь как будут dirty checks происходить, а также семантику работающих в этом случае транзакций. Желание сериализовать сессию сразу отпадет
Для начала, представь как будут dirty checks происходитьНа уровне кэша второго уровня
а также семантику работающих в этом случае транзакциймодификация persistent-layer объекта происходит только в рамках открытой сессии, там с транзакциями все ок
вообще, сессию сериализуют для того, чтобы передавать ее по RMI к примеру. Т.е. есть некий Locator для нее, который кроме всего прочего морочится на тему потоков (потому как Session НЕ ЯВЛЯЕТСЯ threadsafe и для передачи сессии в бины к примеру требуется сериализуемость сессии
модификация persistent-layer объекта происходит только в рамках открытой сессии, там с транзакциями все окче-то я не понял. так ты только закрытые сессии сериализуешь? а нафига? и никаких объектов там нет в таком случае...
Т.е. есть некий Locator для нее, который кроме всего прочего морочится на тему потоков (потому как Session НЕ ЯВЛЯЕТСЯ threadsafe и для передачи сессии в бины к примеру требуется сериализуемость сессииГосподи, Какой Ужас. У меня нет слов.
че-то я не понял. так ты только закрытые сессии сериализуешь? а нафига? и никаких объектов там нет в таком случае...дяденька! как вы себе представляете скажем 3tier систему с большой нагрузкой, у которой постоянно держатся открытые сессии хибернейта на каждую открытую сессию клиента? Это ж какой емкости connection pool должен быть?!
закрытые сессии никому не нужны нафик. вот сессии с закрытыми connection еще можно использовать некоторым образом.
Господи, Какой Ужас. У меня нет словПро что нет слов? Про масштабируемость и прочие радости наверное слышали? Связи не видите? Если нет, то не стоит дисскутировать в таком случае, если да - то не потрудитесь ли объяснить, чем вызвана такая реакция?
сессии с закрытыми connection еще можно использоватьсмахивает на какое-то грязное извращение...
слушай, опиши плз в двух словах свою систему, а? а то пока как-то непонятно для чего ты хибернейт используешь, и есть стойкое ощущение(пока не очень обоснованное) что ты его там используешь не по назначениею :-\
смахивает на какое-то грязное извращениея говорил, что это не извращение? Я говорил, что это в принципе можно делать, но не то, что я так делаю.
опиши плз в двух словах свою системутрехзвенка, веб интерфейс на struts и своих разработках, бизнес-логика на Stateless Sesion бинах, Hibernate для ORM объектов бизнес-логики, используется из бинов. В данный момент прикручиваю аспекты на эту систему.
используешь не по назначениеютипа булочки печь? Hibernate трудно использовать не по назначению имхо
Про что нет слов? Про масштабируемость и прочие радости наверное слышали? Связи не видите? Если нет, то не стоит дисскутировать в таком случае, если да - то не потрудитесь ли объяснить, чем вызвана такая реакция?Да, ты знаешь, я "кое-что" слышал про масштабируемость, поэтому до такой вещи как передача сессии по RMI в бины, я, наверное, никогда не додумаюсь.
Сериализуешь и десериализуешь сессию с закрытым коннектом? Я правильно понял?нет. сессию вообще руками не сериализую и не десериализую. ни с открытым коннектом, ни с закрытым.
поэтому до такой вещи как передача сессии по RMI в бины, я, наверное, никогда не додумаюсья тоже не передаю сессию в бины. С чего ты это взял? С того, что я написал "к примеру"? Сам же спрашивал, нахрена нужны сериализуемые сессии. Я тебе привел пример, но при этом не утверждал, что я так делаю.
Все, dixi.
Оставить комментарий
6yrop
?