|
|
|
Как заставить Hibernate не ставить символ N перед строками
|
|||
|---|---|---|---|
|
#18+
Всем привет! Есть проблема. При формировании запросов hibernate к базе данных MS SQL Server'a перед каждой строкой hibernate подставляет N' (для преобразования строки в юникодовую строку). Проблема в том, что MS SQL Server' неоптимально составляет план выполнения запроса, если разные типы данных в запросе и конечной таблице (в таблице они как однобайтовые строки). DDL таблицы: CREATE TABLE [ENTITY] ( [ENTT_ID] varchar(32) NOT NULL, [ENTT_URLPART] varchar(32) NULL, [ENTT_NAME] varchar(64) NULL, [ENTT_ISVIEWABLE] smallint NULL, [ENTT_SITE] varchar(32) NULL, [SITE_ID] int NULL, [ENTT_ICON] varchar(256) NULL, CONSTRAINT [PK_ENTITY] PRIMARY KEY([ENTT_ID]) ) Обьявление класса: public class Entity implements Serializable { ... private String id; private String urlPart; private String name; private Boolean isViewable; private Site site; private String icon; ... } Сделал mapping для класса: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="net.persistence.pojo"> <class name="Entity" table="Entity" mutable="false" lazy="true"> <id name="id" column="entt_id"></id> <property name="name" column="entt_name" /> <property name="urlPart" column="entt_urlPart" /> <property name="isViewable" column="entt_isViewable" /> <property name="icon" column="entt_icon" /> <many-to-one name="site" column="site_id" class="Site" lazy="false" /> </class> </hibernate-mapping> hibernate генерирует следующий запрос к БД MS SQL: ... and entity1_.entt_id in (N'news',N'news_analytics',N'news_comment',N'news_interview',N'news_photo',N'news_pr',N'news_press') ... Запрос выполняется очень долго. Если убрать N перед каждой строкой, запрос выполняется на несколько порядков быстрее, так как строится совершенно другой (уже оптимальный) план запроса. Вопрос : Как можно заставить hibernate не подставлять префикс N перед каждой строкой? Как можно решить мою проблему? Заранее благодарен за любую помощь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2007, 16:50:25 |
|
||
|
Как заставить Hibernate не ставить символ N перед строками
|
|||
|---|---|---|---|
|
#18+
возможно, дело в парамтерах не/передаваемых JDBC драйверу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2007, 18:28:52 |
|
||
|
Как заставить Hibernate не ставить символ N перед строками
|
|||
|---|---|---|---|
|
#18+
У нас была обратная проблема - как заставить Hibernate передавать unicode строки, вместо Ansi. В нашем случае все решилось сменой dialect-a (отнаследовали наш dialect от родительского и переопределили значения для string). В Вашем случае задача, похоже обратная. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2007, 09:42:23 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34400831&tid=2146343]: |
0ms |
get settings: |
12ms |
get forum list: |
27ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
47ms |
get topic data: |
21ms |
get forum data: |
5ms |
get page messages: |
80ms |
get tp. blocked users: |
2ms |
| others: | 285ms |
| total: | 491ms |

| 0 / 0 |
