Hibernate-reactive: MS SQL: ์—ด์— ์™ธ๋ž˜ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ–‰ ์‚ฝ์ž… ์‹คํŒจ

์— ๋งŒ๋“  2021๋…„ 05์›” 03์ผ  ยท  20์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: hibernate/hibernate-reactive

๋ถ€๋ชจ/์ž์‹ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” HR ์ œํ’ˆ๊ตฐ์—๋Š” ๋งŽ์€ ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ: EagerTest .

MS SQL์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

javax.persistence.PersistenceException: org.hibernate.HibernateException: io.vertx.mssqlclient.MSSQLException: Cannot insert the value NULL into column 'parent_id', table 'master.dbo.Node'; column does not allow nulls. INSERT fails.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์—ด ์ •์˜ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

[Hibernate] create table Node (id int not null, string varchar(255), version int, parent_id int, primary key (id))

์•„๋งˆ๋„ NULL ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  20 ๋Œ“๊ธ€

์•„๋งˆ๋„ NULL ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋‚˜๋Š” ๋‹ค๋ฅธ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

(์•„๋งˆ๋„ ํ…Œ์ด๋ธ” ์ •์˜๊ฐ€ ํ…Œ์ŠคํŠธ ์‚ฌ์ด์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ญ์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?)

์ƒˆ DB์—์„œ org.hibernate.reactive.EagerTest#testEagerCollectionFetch ๋งŒ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ์„ ์–ป์Šต๋‹ˆ๋‹ค.

INFO Version [vert.x-eventloop-thread-0] HHH000412: Hibernate ORM core version 5.4.29.Final
Using database type: MSSQLSERVER
INFO Version [vert.x-worker-thread-0] HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
INFO Dialect [vert.x-worker-thread-0] HHH000400: Using dialect: org.hibernate.dialect.SQLServer2012Dialect
INFO ReactiveIntegrator [vert.x-worker-thread-0] HRX000001: Hibernate Reactive Preview
INFO DefaultSqlClientPool [vert.x-worker-thread-0] HRX000011: SQL Client URL [jdbc:sqlserver://localhost:1433;user=SA;password=HReact@~~]
INFO DefaultSqlClientPool [vert.x-worker-thread-0] HRX000012: Connection pool size: 5
INFO DefaultSqlClientPool [vert.x-eventloop-thread-0] HRX000013: Detected driver [io.vertx.pgclient.spi.PgDriver]
INFO DefaultSqlClientPool [vert.x-eventloop-thread-0] HRX000013: Detected driver [io.vertx.mysqlclient.spi.MySQLDriver]
INFO DefaultSqlClientPool [vert.x-eventloop-thread-0] HRX000013: Detected driver [io.vertx.db2client.spi.DB2Driver]
INFO DefaultSqlClientPool [vert.x-eventloop-thread-0] HRX000013: Detected driver [io.vertx.mssqlclient.spi.MSSQLDriver]
[Hibernate] alter table Element drop constraint FKcwlxr32pujpq4d7va12w278fw
WARN GenerationTargetToDatabase [vert.x-eventloop-thread-0] HRX000021: DDL command failed [io.vertx.mssqlclient.MSSQLException: Statement(s) could not be prepared.]
[Hibernate] alter table Node drop constraint FKnuolrnqa3oux6ln0vkqeuhsda
WARN GenerationTargetToDatabase [vert.x-eventloop-thread-0] HRX000021: DDL command failed [io.vertx.mssqlclient.MSSQLException: Statement(s) could not be prepared.]
[Hibernate] drop table Element
WARN GenerationTargetToDatabase [vert.x-eventloop-thread-0] HRX000021: DDL command failed [io.vertx.mssqlclient.MSSQLException: Cannot drop the table 'Element', because it does not exist or you do not have permission.]
[Hibernate] drop table Node
WARN GenerationTargetToDatabase [vert.x-eventloop-thread-0] HRX000021: DDL command failed [io.vertx.mssqlclient.MSSQLException: Cannot drop the table 'Node', because it does not exist or you do not have permission.]
[Hibernate] drop sequence hibernate_sequence
WARN GenerationTargetToDatabase [vert.x-eventloop-thread-0] HRX000021: DDL command failed [io.vertx.mssqlclient.MSSQLException: Cannot drop the sequence 'hibernate_sequence', because it does not exist or you do not have permission.]
[Hibernate] alter table Element drop constraint FKcwlxr32pujpq4d7va12w278fw
WARN GenerationTargetToDatabase [vert.x-eventloop-thread-0] HRX000021: DDL command failed [io.vertx.mssqlclient.MSSQLException: Statement(s) could not be prepared.]
[Hibernate] alter table Node drop constraint FKnuolrnqa3oux6ln0vkqeuhsda
WARN GenerationTargetToDatabase [vert.x-eventloop-thread-0] HRX000021: DDL command failed [io.vertx.mssqlclient.MSSQLException: Statement(s) could not be prepared.]
[Hibernate] drop table Element
WARN GenerationTargetToDatabase [vert.x-eventloop-thread-0] HRX000021: DDL command failed [io.vertx.mssqlclient.MSSQLException: Cannot drop the table 'Element', because it does not exist or you do not have permission.]
[Hibernate] drop table Node
WARN GenerationTargetToDatabase [vert.x-eventloop-thread-0] HRX000021: DDL command failed [io.vertx.mssqlclient.MSSQLException: Cannot drop the table 'Node', because it does not exist or you do not have permission.]
[Hibernate] drop sequence hibernate_sequence
WARN GenerationTargetToDatabase [vert.x-eventloop-thread-0] HRX000021: DDL command failed [io.vertx.mssqlclient.MSSQLException: Cannot drop the sequence 'hibernate_sequence', because it does not exist or you do not have permission.]
[Hibernate] create sequence hibernate_sequence start with 1 increment by 1
[Hibernate] create table Element (id int not null, node_id int, primary key (id))
[Hibernate] create table Node (id int not null, string varchar(255), version int, parent_id int, primary key (id))
[Hibernate] alter table Element add constraint FKcwlxr32pujpq4d7va12w278fw foreign key (node_id) references Node
[Hibernate] alter table Node add constraint FKnuolrnqa3oux6ln0vkqeuhsda foreign key (parent_id) references Node
[Hibernate] select next value for hibernate_sequence
[Hibernate] select next value for hibernate_sequence
[Hibernate] select next value for hibernate_sequence
[Hibernate] select next value for hibernate_sequence
[Hibernate] select next value for hibernate_sequence
[Hibernate] insert into Node (parent_id, string, version, id) values (<strong i="7">@P1</strong>, <strong i="8">@P2</strong>, <strong i="9">@P3</strong>, @P4)

javax.persistence.PersistenceException: org.hibernate.HibernateException: io.vertx.mssqlclient.MSSQLException: Cannot insert the value NULL into column 'parent_id', table 'master.dbo.Node'; column does not allow nulls. INSERT fails.
java.util.concurrent.CompletionException: javax.persistence.PersistenceException: org.hibernate.HibernateException: io.vertx.mssqlclient.MSSQLException: Cannot insert the value NULL into column 'parent_id', table 'master.dbo.Node'; column does not allow nulls. INSERT fails.
    at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:273)
    at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:280)
    at java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:838)
    at java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:811)
    at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)
    at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990)
    at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.lambda$unroll$0(AsyncTrampoline.java:121)
    at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774)
    at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750)
    at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)
    at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990)
    at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.lambda$unroll$0(AsyncTrampoline.java:121)
    at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774)
    at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750)
    at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)
    at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990)
    at org.hibernate.reactive.pool.impl.Handlers.lambda$toCompletionStage$0(Handlers.java:29)
    at io.vertx.core.impl.future.FutureImpl$3.onFailure(FutureImpl.java:128)
    at io.vertx.core.impl.future.FutureBase.emitFailure(FutureBase.java:79)
    at io.vertx.core.impl.future.FutureImpl.tryFail(FutureImpl.java:198)
    at io.vertx.core.impl.future.PromiseImpl.tryFail(PromiseImpl.java:23)
    at io.vertx.sqlclient.impl.QueryResultBuilder.tryFail(QueryResultBuilder.java:118)
    at io.vertx.core.Promise.fail(Promise.java:89)
    at io.vertx.core.Promise.handle(Promise.java:53)
    at io.vertx.core.Promise.handle(Promise.java:29)
    at io.vertx.core.impl.future.FutureImpl$3.onFailure(FutureImpl.java:128)
    at io.vertx.core.impl.future.FutureBase.emitFailure(FutureBase.java:79)
    at io.vertx.core.impl.future.FutureImpl.tryFail(FutureImpl.java:198)
    at io.vertx.core.impl.future.PromiseImpl.tryFail(PromiseImpl.java:23)
    at io.vertx.core.impl.future.PromiseImpl.onFailure(PromiseImpl.java:54)
    at io.vertx.core.impl.future.PromiseImpl.handle(PromiseImpl.java:43)
    at io.vertx.core.impl.future.PromiseImpl.handle(PromiseImpl.java:23)
    at io.vertx.sqlclient.impl.command.CommandResponse.fire(CommandResponse.java:46)
    at io.vertx.sqlclient.impl.SocketConnectionBase.handleMessage(SocketConnectionBase.java:261)
    at io.vertx.sqlclient.impl.SocketConnectionBase.lambda$init$0(SocketConnectionBase.java:97)
    at io.vertx.core.net.impl.NetSocketImpl.lambda$new$1(NetSocketImpl.java:97)
    at io.vertx.core.streams.impl.InboundBuffer.handleEvent(InboundBuffer.java:240)
    at io.vertx.core.streams.impl.InboundBuffer.write(InboundBuffer.java:130)
    at io.vertx.core.net.impl.NetSocketImpl.lambda$handleMessage$9(NetSocketImpl.java:390)
    at io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:49)
    at io.vertx.core.impl.ContextImpl.emit(ContextImpl.java:275)
    at io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:22)
    at io.vertx.core.net.impl.NetSocketImpl.handleMessage(NetSocketImpl.java:389)
    at io.vertx.core.net.impl.ConnectionBase.read(ConnectionBase.java:153)
    at io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:154)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
    at io.vertx.mssqlclient.impl.codec.TdsMessageEncoder.lambda$write$0(TdsMessageEncoder.java:52)
    at io.vertx.mssqlclient.impl.codec.MSSQLCommandCodec.complete(MSSQLCommandCodec.java:70)
    at io.vertx.mssqlclient.impl.codec.ExtendedQueryCommandCodec.decodeMessage(ExtendedQueryCommandCodec.java:121)
    at io.vertx.mssqlclient.impl.codec.TdsMessageDecoder.decodeMessage(TdsMessageDecoder.java:70)
    at io.vertx.mssqlclient.impl.codec.TdsMessageDecoder.decode(TdsMessageDecoder.java:49)
    at io.vertx.mssqlclient.impl.codec.TdsMessageDecoder.decode(TdsMessageDecoder.java:27)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.lang.Thread.run(Thread.java:748)
Caused by: javax.persistence.PersistenceException: org.hibernate.HibernateException: io.vertx.mssqlclient.MSSQLException: Cannot insert the value NULL into column 'parent_id', table 'master.dbo.Node'; column does not allow nulls. INSERT fails.
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
    at org.hibernate.reactive.session.impl.ReactiveExceptionConverter.convert(ReactiveExceptionConverter.java:31)
    at org.hibernate.reactive.session.impl.ReactiveSessionImpl.lambda$doFlush$34(ReactiveSessionImpl.java:879)
    at java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:836)
    ... 73 more
Caused by: org.hibernate.HibernateException: io.vertx.mssqlclient.MSSQLException: Cannot insert the value NULL into column 'parent_id', table 'master.dbo.Node'; column does not allow nulls. INSERT fails.
    ... 76 more
Caused by: io.vertx.mssqlclient.MSSQLException: Cannot insert the value NULL into column 'parent_id', table 'master.dbo.Node'; column does not allow nulls. INSERT fails.
    at io.vertx.mssqlclient.impl.codec.MSSQLCommandCodec.handleErrorToken(MSSQLCommandCodec.java:60)
    at io.vertx.mssqlclient.impl.codec.ExtendedQueryCommandCodec.decodeMessage(ExtendedQueryCommandCodec.java:84)
    ... 25 more


Gradle Test Executor 34 > org.hibernate.reactive.EagerTest > testEagerCollectionFetch FAILED
    java.util.concurrent.CompletionException: javax.persistence.PersistenceException: org.hibernate.HibernateException: io.vertx.mssqlclient.MSSQLException: Cannot insert the value NULL into column 'parent_id', table 'master.dbo.Node'; column does not allow nulls. INSERT fails.
        at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:273)
        at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:280)
        at java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:838)
        at java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:811)
        at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)
        at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990)
        at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.lambda$unroll$0(AsyncTrampoline.java:121)
        at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774)
        at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750)
        at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)
        at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990)
        at com.ibm.asyncutil.iteration.AsyncTrampoline$TrampolineInternal.lambda$unroll$0(AsyncTrampoline.java:121)
        at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774)
        at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750)
        at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488)
        at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990)
        at org.hibernate.reactive.pool.impl.Handlers.lambda$toCompletionStage$0(Handlers.java:29)
        at io.vertx.core.impl.future.FutureImpl$3.onFailure(FutureImpl.java:128)
        at io.vertx.core.impl.future.FutureBase.emitFailure(FutureBase.java:79)
        at io.vertx.core.impl.future.FutureImpl.tryFail(FutureImpl.java:198)
        at io.vertx.core.impl.future.PromiseImpl.tryFail(PromiseImpl.java:23)
        at io.vertx.sqlclient.impl.QueryResultBuilder.tryFail(QueryResultBuilder.java:118)
        at io.vertx.core.Promise.fail(Promise.java:89)
        at io.vertx.core.Promise.handle(Promise.java:53)
        at io.vertx.core.Promise.handle(Promise.java:29)
        at io.vertx.core.impl.future.FutureImpl$3.onFailure(FutureImpl.java:128)
        at io.vertx.core.impl.future.FutureBase.emitFailure(FutureBase.java:79)
        at io.vertx.core.impl.future.FutureImpl.tryFail(FutureImpl.java:198)
        at io.vertx.core.impl.future.PromiseImpl.tryFail(PromiseImpl.java:23)
        at io.vertx.core.impl.future.PromiseImpl.onFailure(PromiseImpl.java:54)
        at io.vertx.core.impl.future.PromiseImpl.handle(PromiseImpl.java:43)
        at io.vertx.core.impl.future.PromiseImpl.handle(PromiseImpl.java:23)
        at io.vertx.sqlclient.impl.command.CommandResponse.fire(CommandResponse.java:46)
        at io.vertx.sqlclient.impl.SocketConnectionBase.handleMessage(SocketConnectionBase.java:261)
        at io.vertx.sqlclient.impl.SocketConnectionBase.lambda$init$0(SocketConnectionBase.java:97)
        at io.vertx.core.net.impl.NetSocketImpl.lambda$new$1(NetSocketImpl.java:97)
        at io.vertx.core.streams.impl.InboundBuffer.handleEvent(InboundBuffer.java:240)
        at io.vertx.core.streams.impl.InboundBuffer.write(InboundBuffer.java:130)
        at io.vertx.core.net.impl.NetSocketImpl.lambda$handleMessage$9(NetSocketImpl.java:390)
        at io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:49)
        at io.vertx.core.impl.ContextImpl.emit(ContextImpl.java:275)
        at io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:22)
        at io.vertx.core.net.impl.NetSocketImpl.handleMessage(NetSocketImpl.java:389)
        at io.vertx.core.net.impl.ConnectionBase.read(ConnectionBase.java:153)
        at io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:154)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.vertx.mssqlclient.impl.codec.TdsMessageEncoder.lambda$write$0(TdsMessageEncoder.java:52)
        at io.vertx.mssqlclient.impl.codec.MSSQLCommandCodec.complete(MSSQLCommandCodec.java:70)
        at io.vertx.mssqlclient.impl.codec.ExtendedQueryCommandCodec.decodeMessage(ExtendedQueryCommandCodec.java:121)
        at io.vertx.mssqlclient.impl.codec.TdsMessageDecoder.decodeMessage(TdsMessageDecoder.java:70)
        at io.vertx.mssqlclient.impl.codec.TdsMessageDecoder.decode(TdsMessageDecoder.java:49)
        at io.vertx.mssqlclient.impl.codec.TdsMessageDecoder.decode(TdsMessageDecoder.java:27)
        at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:88)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
        at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:748)
        Caused by:
        javax.persistence.PersistenceException: org.hibernate.HibernateException: io.vertx.mssqlclient.MSSQLException: Cannot insert the value NULL into column 'parent_id', table 'master.dbo.Node'; column does not allow nulls. INSERT fails.
            at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
            at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
            at org.hibernate.reactive.session.impl.ReactiveExceptionConverter.convert(ReactiveExceptionConverter.java:31)
            at org.hibernate.reactive.session.impl.ReactiveSessionImpl.lambda$doFlush$34(ReactiveSessionImpl.java:879)
            at java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:836)
            ... 73 more
            Caused by:
            org.hibernate.HibernateException: io.vertx.mssqlclient.MSSQLException: Cannot insert the value NULL into column 'parent_id', table 'master.dbo.Node'; column does not allow nulls. INSERT fails.
                at org.hibernate.reactive.session.impl.ReactiveExceptionConverter.convert(ReactiveExceptionConverter.java:31)
                ... 75 more
                Caused by:
                io.vertx.mssqlclient.MSSQLException: Cannot insert the value NULL into column 'parent_id', table 'master.dbo.Node'; column does not allow nulls. INSERT fails.
                    at io.vertx.mssqlclient.impl.codec.MSSQLCommandCodec.handleErrorToken(MSSQLCommandCodec.java:60)
                    at io.vertx.mssqlclient.impl.codec.ExtendedQueryCommandCodec.decodeMessage(ExtendedQueryCommandCodec.java:84)
                    ... 25 more
----------------------------------------------------------------
mssql results: FAILURE (1 tests, 0 passed, 1 failed, 0 skipped)
----------------------------------------------------------------

DB๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด ์ฒซ ๋ฒˆ์งธ ๊ฒฝ๊ณ ๊ฐ€ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ…Œ์ŠคํŠธ ์„ค์ •์ด ์ •์ƒ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

[Hibernate] create sequence hibernate_sequence start with 1 increment by 1
[Hibernate] create table Element (id int not null, node_id int, primary key (id))
[Hibernate] create table Node (id int not null, string varchar(255), version int, parent_id int, primary key (id))
[Hibernate] alter table Element add constraint FKcwlxr32pujpq4d7va12w278fw foreign key (node_id) references Node
[Hibernate] alter table Node add constraint FKnuolrnqa3oux6ln0vkqeuhsda foreign key (parent_id) references Node

MSSQLException: Cannot drop the table 'Node', because it does not exist or you do not have permission.]

์ด๊ฒƒ์€ ํ™•์‹คํžˆ ์ง„์งœ ์ด์œ ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํ™•์‹คํžˆ ์ง„์งœ ์ด์œ ์ž…๋‹ˆ๋‹ค.

์˜ค, ๋ฏธ์•ˆ ํ•ด์š”, ๋‚ด ๋‚˜์œ, ์•„๋‹ˆ, ์ด์œ ๊ฐ€ ์•„๋‹ˆ์—์š”.

์ •๋ง ์•„๋ฌด ์ƒ๊ฐ์ด ์—†์Šต๋‹ˆ๋‹ค. SQL Server ์™ธ๋ž˜ ํ‚ค๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ not null ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋‹ค๋ฅธ ์ผ์ด ๋ฐœ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๋ง์ด ์‚ฌ์‹ค์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด GUI ํด๋ผ์ด์–ธํŠธ์—์„œ ๋™์ผํ•œ SQL์„ ์‹คํ–‰ํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์˜ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‹œ๋„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค

>

sqlcmd ์—์„œ ์ด๊ฒƒ์„ ์‹คํ–‰ํ•  ๋•Œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

1> create sequence hibernate_sequence start with 1 increment by 1
2> go
1> create table Element (id int not null, node_id int, primary key (id))
2> go
1> create table Node (id int not null, string varchar(255), version int, parent_id int, primary key (id))
2> go
1> alter table Element add constraint FKcwlxr32pujpq4d7va12w278fw foreign key (node_id) references Node
2> go
1> alter table Node add constraint FKnuolrnqa3oux6ln0vkqeuhsda foreign key (parent_id) references Node
2> go
1> insert into Node (parent_id, string, version, id) values (null, 'parent',0, 1)
2> go

(1 rows affected)
1> select * from Node
2> go
id          string                                                                                                                                                                                                                                                          version     parent_id  
----------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------- -----------
          1 parent                                                                                                                                                                                                                                                                    0        NULL

(1 rows affected)
1> exit

๊ทธ๋ž˜์„œ ๋‹น์‹ ์ด ์˜ณ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ œ์•ฝ ์กฐ๊ฑด ์ •์˜์™€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

@tsegismont MSSQLException ์ƒ์„ฑ์ž์—์„œ ์ค‘๋‹จ์ ์„ ์‚ฌ์šฉํ•˜์—ฌ EagerTest ๋ฅผ ๋””๋ฒ„๊น…ํ•  ๋•Œ MSSQLException ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ "'?' ๊ทผ์ฒ˜์˜ ๊ตฌ๋ฌธ์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค." ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๊ทธ ์˜ˆ์™ธ๋Š” ๋จนํžŒ ๊ฒƒ ๊ฐ™๊ณ  ๋Œ€์‹  "Statement(s) could not be ready"๋ผ๋Š” ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ MSSQLException ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

Vert.x 4.1.0-SNAPSHOT์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ๋ฅผ ๋””๋ฒ„๊น…ํ•  ๋•Œ๋„ ๋™์ผํ•œ ์ข…๋ฅ˜์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@gbadner https://github.com/DavidD/hibernate-reactive/pull/13 (ํŠนํžˆ SQL Server์— ๋Œ€ํ•œ Parameters ํด๋ž˜์Šค ๊ตฌํ˜„)์—์„œ ๊ณต์œ ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” SQL Server๋กœ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ„๊ธฐ ์—…์ŠคํŠธ๋ฆผ์„ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์•ผ ์ตœ์‹  ๋ฉ”์ธ์œผ๋กœ ๋ฆฌ๋ฒ ์ด์Šคํ•˜๊ณ  ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ๋Š” ์ฐธ์กฐ ๋ถ„๊ธฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@tsegismont ์ƒํƒœ๊ฐ€ ์–ด๋–ค๊ฐ€์š”?

(๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ด๋“  ๋ฌธ์ œ ์„ค๋ช…์ด ๋ฌธ์ œ๋ฅผ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.)

@gavinking ์•„์ง ์กฐ์‚ฌํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค

@gavinking ๋ฐฉ์–ธ ๊ตฌํ˜„์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Index: hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/NoJdbcEnvironmentInitiator.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/NoJdbcEnvironmentInitiator.java b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/NoJdbcEnvironmentInitiator.java
--- a/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/NoJdbcEnvironmentInitiator.java (revision dd82c137dcdc3cf5a388ae427e1ec042a9d9552c)
+++ b/hibernate-reactive-core/src/main/java/org/hibernate/reactive/provider/service/NoJdbcEnvironmentInitiator.java (date 1621943075708)
@@ -135,10 +135,18 @@
            return  CockroachDB201Dialect.class;
        }
        else if ( url.startsWith("sqlserver:") ) {
-           return  SQLServer2012Dialect.class;
+           return  SpecialSQLServer2012Dialect.class;
        }
        else {
            return null;
        }
    }
+
+   public static class SpecialSQLServer2012Dialect extends SQLServer2012Dialect {
+
+       <strong i="7">@Override</strong>
+       public String getNullColumnString() {
+           return " null";
+       }
+   }
 }

์ด์œ ๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋ช…์‹œ์ ์œผ๋กœ nullable๋กœ ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ(Sybase์™€ ๊ฐ™์ด) ์„œ๋ฒ„๊ฐ€ nullable์ด ์•„๋‹Œ ์—ด์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฒจ์ด ์šธ๋ฆฌ๋‚˜์š”?

๋‚ด ๋ง์€, ๊ทธ ๋ฐฉ์–ธ์€ ๋ช‡ ๋…„ ๋™์•ˆ Hibernate ORM์—์„œ ์‚ฌ์šฉ๋œ ๊ฒƒ์ด๋ฏ€๋กœ ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ํ‹€๋ฆด ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค(SQL ์„œ๋ฒ„ JDBC ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ด์ƒํ•œ ์ผ์„ ํ•˜์ง€ ์•Š๋Š” ํ•œ).

์—ฌ๊ธฐ ๋‚ด๊ฐ€ ์ฐพ์€ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋™์ž‘์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์„ค์ •์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ์ผ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  ์—ฐ๊ฒฐ์€ ์—ฐ๊ฒฐ๋  ๋•Œ ์ž๋™์œผ๋กœ SET ANSI_NULL_DEFAULT_ON ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@gavinking์„ ํ†ตํ•ด ์ด๊ฒƒ์ด ์„œ๋ฒ„ ๊ตฌ์„ฑ ๋•Œ๋ฌธ์ธ์ง€ ๋˜๋Š” Reactive Client๊ฐ€ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” JDBC ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ ์—…์ŠคํŠธ๋ฆผ์— ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค๊ณ  ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@gavinking ์ด ํšจ๊ณผ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ ์—…์ŠคํŠธ๋ฆผ์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด https://github.com/eclipse-vertx/vertx-sql-client/issues/963 ์„ ์ œ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํ•ญ๋ชฉ์„ ๋‹ซ์œผ์‹ญ์‹œ์˜ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์—…์ŠคํŠธ๋ฆผ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋ฉด ๋‚˜์ค‘์— ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ์•˜์–ด ๊ณ ๋งˆ์›Œ. ๋‚˜๋Š” ๋ฌธ์ œ๊ฐ€ ์—ฌ๊ธฐ์— ์†ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฏ€๋กœ ์ด๊ฒƒ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰