braisdom / objectivesql Goto Github PK
View Code? Open in Web Editor NEWWriting SQL using Java syntax
License: Apache License 2.0
Writing SQL using Java syntax
License: Apache License 2.0
Select select = new Select();
select.from(order, member)
.where(order.memberId.eq(member.id));
select.project(member.no,
member.name,
member.mobile,
countDistinct(order.no).as("order_count"),
sum(order.quantity).as("total_quantity"),
sum(order.amount).as("total_amount"),
min(order.salesAt).as("first_shopping"),
max(order.salesAt).as("last_shopping"));
select.groupBy(member.no, member.name, member.mobile);
return select.execute(DatabaseType.MySQL, Member.class);
execute 时的DatabaseType 是很别扭呀,其它的ORM 框架都需要明确告诉框架数据的类型,应该可以自动获取的
ObjectiveSQL 1.3.7, IntelliJ IDEA 插件:1.2.8,报错信息如下:
org.intellij.sequencer.SequencePlugin2@65ab3257
com.intellij.serviceContainer.AlreadyDisposedException: Already disposed: Project(name=funcsql, containerState=DISPOSE_IN_PROGRESS, componentStore=/Users/braisdom/funcsql)
at com.intellij.serviceContainer.ComponentManagerImpl.getMessageBus(ComponentManagerImpl.kt:140)
at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.fireStateChanged(ToolWindowManagerImpl.kt:1488)
at com.intellij.openapi.wm.impl.ToolWindowManagerImpl.unregisterToolWindow(ToolWindowManagerImpl.kt:1052)
at org.intellij.sequencer.SequencePlugin2.projectClosed(SequencePlugin2.java:81)
at com.intellij.openapi.project.impl.ProjectManagerImpl.fireProjectClosed(ProjectManagerImpl.java:480)
at com.intellij.openapi.project.impl.ProjectManagerImpl.lambda$closeProject$5(ProjectManagerImpl.java:383)
at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:980)
at com.intellij.openapi.project.impl.ProjectManagerImpl.closeProject(ProjectManagerImpl.java:372)
at com.intellij.openapi.project.impl.ProjectManagerImpl.closeAndDispose(ProjectManagerImpl.java:407)
at com.intellij.openapi.wm.impl.CloseProjectWindowHelper.closeProjectAndShowWelcomeFrameIfNoProjectOpened(CloseProjectWindowHelper.kt:44)
at com.intellij.openapi.wm.impl.CloseProjectWindowHelper.windowClosing(CloseProjectWindowHelper.kt:32)
at com.intellij.openapi.wm.impl.ProjectFrameHelper$2.windowClosing(ProjectFrameHelper.java:225)
at java.desktop/java.awt.AWTEventMulticaster.windowClosing(AWTEventMulticaster.java:357)
at java.desktop/java.awt.AWTEventMulticaster.windowClosing(AWTEventMulticaster.java:357)
at java.desktop/java.awt.Window.processWindowEvent(Window.java:2079)
at java.desktop/javax.swing.JFrame.processWindowEvent(JFrame.java:298)
at java.desktop/java.awt.Window.processEvent(Window.java:2038)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5029)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2773)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4861)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:778)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:751)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:749)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:748)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:971)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:841)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:452)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:744)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$9(IdeEventQueue.java:451)
at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:802)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:505)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
代码:
@DomainModel(primaryFieldName = "id2")
private static class TestClass {
private String name;
}
public void customizedPrimary() {
TestClass clazz = new TestClass();
clazz.setId(1);
Assert.assertEquals(new Integer(1), clazz.id);
}
错误:
java: 找不到符号
符号: 方法 setId(int)
位置: 类型为com.github.braisdom.objsql.apt.DomainModelCodeGeneratorTest.TestClass的变量 clazz
SQL:
INSERT INTO "user" ("id","name","age") VALUES (?,?,?)
异常信息
Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: user
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
at com.zaxxer.hikari.pool.ProxyConnection.prepareStatement(ProxyConnection.java:317)
at com.zaxxer.hikari.pool.HikariProxyConnection.prepareStatement(HikariProxyConnection.java)
at com.github.braisdom.objsql.jdbc.QueryRunner.insert(QueryRunner.java:599)
... 24 more
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: user
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.SchemaManager.getTable(Unknown Source)
at org.hsqldb.ParserDQL.readTableName(Unknown Source)
at org.hsqldb.ParserDQL.readRangeVariableForDataChange(Unknown Source)
at org.hsqldb.ParserDML.compileInsertStatement(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatement(Unknown Source)
at org.hsqldb.Session.compileStatement(Unknown Source)
at org.hsqldb.StatementManager.compile(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
... 29 more
简单查询中,排序是很正常的需求呀,不能用到排序这种简单的查询还需要使用复杂SQL 吧,不是很人性化。
从我的理解看,增加一个排序应该不难呀。
Could not find org.mangosdk.spi:spi:0.2.4.
Required by:
project : > com.github.braisdom:objective-sql:1.3.6
How fix it
我在编码的过程中,IntelliJ 报了这个错,随机的,完整的堆栈如下,望尽快修复:
java.lang.Throwable: Non-idempotent computation: it returns different results when invoked multiple times or on different threads:
38 != 30
which is length of [ObjSqlLightMethodBuilder#setNo, ObjSqlLightMethodBuilder#getNo, ObjSqlLightMethodBuilder#setName, ObjSqlLightMethodBuilder#getName, ObjSqlLightMethodBuilder#setGender, ObjSqlLightMethodBuilder#getGender, ObjSqlLightMethodBuilder#setMobile, ObjSqlLightMethodBuilder#getMobile, ObjSqlLightMethodBuilder#setId, ObjSqlLightMethodBuilder#getId, ObjSqlLightMethodBuilder#queryByPrimaryKey, ObjSqlLightMethodBuilder#createQuery, ObjSqlLightMethodBuilder#count, ObjSqlLightMethodBuilder#countAll, ObjSqlLightMethodBuilder#query, ObjSqlLightMethodBuilder#query, ObjSqlLightMethodBuilder#queryBySql, ObjSqlLightMethodBuilder#queryFirst, ObjSqlLightMethodBuilder#queryFirst, ObjSqlLightMethodBuilder#queryAll, ObjSqlLightMethodBuilder#createPersistence, ObjSqlLightMethodBuilder#create, ObjSqlLightMethodBuilder#create, ObjSqlLightMethodBuilder#create, ObjSqlLightMethodBuilder#create, ObjSqlLightMethodBuilder#update, ObjSqlLightMethodBuilder#update, ObjSqlLightMethodBuilder#destroy, ObjSqlLightMethodBuilder#destroy, ObjSqlLightMethodBuilder#save, ObjSqlLightMethodBuilder#save, ObjSqlLightMethodBuilder#validate, ObjSqlLightMethodBuilder#execute, ObjSqlLightMethodBuilder#newInstanceFrom, ObjSqlLightMethodBuilder#newInstanceFrom, ObjSqlLightMethodBuilder#getRawAttributes, ObjSqlLightMethodBuilder#getRawAttribute, ObjSqlLightMethodBuilder#asTable] and [ObjSqlLightMethodBuilder#setId, ObjSqlLightMethodBuilder#getId, ObjSqlLightMethodBuilder#queryByPrimaryKey, ObjSqlLightMethodBuilder#createQuery, ObjSqlLightMethodBuilder#count, ObjSqlLightMethodBuilder#countAll, ObjSqlLightMethodBuilder#query, ObjSqlLightMethodBuilder#query, ObjSqlLightMethodBuilder#queryBySql, ObjSqlLightMethodBuilder#queryFirst, ObjSqlLightMethodBuilder#queryFirst, ObjSqlLightMethodBuilder#queryAll, ObjSqlLightMethodBuilder#createPersistence, ObjSqlLightMethodBuilder#create, ObjSqlLightMethodBuilder#create, ObjSqlLightMethodBuilder#create, ObjSqlLightMethodBuilder#create, ObjSqlLightMethodBuilder#update, ObjSqlLightMethodBuilder#update, ObjSqlLightMethodBuilder#destroy, ObjSqlLightMethodBuilder#destroy, ObjSqlLightMethodBuilder#save, ObjSqlLightMethodBuilder#save, ObjSqlLightMethodBuilder#validate, ObjSqlLightMethodBuilder#execute, ObjSqlLightMethodBuilder#newInstanceFrom, ObjSqlLightMethodBuilder#newInstanceFrom, ObjSqlLightMethodBuilder#getRawAttributes, ObjSqlLightMethodBuilder#getRawAttribute, ObjSqlLightMethodBuilder#asTable]
Recomputation gives com.intellij.util.CachedValueBase$Data@26fbcccc which is equivalent to 'fresh'
at com.intellij.openapi.diagnostic.Logger.error(Logger.java:146)
at com.intellij.util.IdempotenceChecker.reportFailure(IdempotenceChecker.java:91)
at com.intellij.util.IdempotenceChecker.checkEquivalence(IdempotenceChecker.java:78)
at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:245)
at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:43)
at com.intellij.util.CachedValuesManagerImpl.getCachedValue(CachedValuesManagerImpl.java:73)
at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:154)
at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:136)
at com.intellij.psi.impl.source.ClassInnerStuffCache.getMethods(ClassInnerStuffCache.java:43)
at com.intellij.psi.impl.source.PsiClassImpl.getMethods(PsiClassImpl.java:278)
at com.intellij.psi.impl.PsiClassImplUtil.lambda$createMembersMap$4(PsiClassImplUtil.java:343)
at com.intellij.util.containers.ConcurrentFactoryMap$2.create(ConcurrentFactoryMap.java:181)
at com.intellij.util.containers.ConcurrentFactoryMap.get(ConcurrentFactoryMap.java:40)
at com.intellij.psi.impl.PsiClassImplUtil$MembersMap.get(PsiClassImplUtil.java:326)
at com.intellij.psi.impl.PsiClassImplUtil$MembersMap.access$000(PsiClassImplUtil.java:318)
at com.intellij.psi.impl.PsiClassImplUtil.processCachedMembersByName(PsiClassImplUtil.java:531)
at com.intellij.psi.impl.PsiClassImplUtil.processDeclarationsInClass(PsiClassImplUtil.java:412)
at com.intellij.psi.impl.PsiClassImplUtil.processDeclarationsInClass(PsiClassImplUtil.java:389)
at com.intellij.psi.impl.source.PsiClassImpl.processDeclarations(PsiClassImpl.java:476)
at com.intellij.psi.scope.util.PsiScopesUtil.processQualifierResult(PsiScopesUtil.java:499)
at com.intellij.psi.scope.util.PsiScopesUtil.setupAndRunProcessor(PsiScopesUtil.java:344)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.resolveToMethod(PsiReferenceExpressionImpl.java:323)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.resolve(PsiReferenceExpressionImpl.java:302)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.access$100(PsiReferenceExpressionImpl.java:50)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$OurGenericsResolver.resolve(PsiReferenceExpressionImpl.java:205)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$OurGenericsResolver.resolve(PsiReferenceExpressionImpl.java:181)
at com.intellij.psi.impl.source.resolve.ResolveCache.lambda$resolveWithCaching$2(ResolveCache.java:182)
at com.intellij.openapi.util.Computable.get(Computable.java:17)
at com.intellij.psi.impl.source.resolve.ResolveCache.lambda$loggingResolver$3(ResolveCache.java:225)
at com.intellij.openapi.util.RecursionManager$1.doPreventingRecursion(RecursionManager.java:117)
at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:75)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolve(ResolveCache.java:202)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:182)
at com.intellij.psi.impl.PsiImplUtil.multiResolveImpl(PsiImplUtil.java:786)
at com.intellij.psi.impl.PsiImplUtil.multiResolveImpl(PsiImplUtil.java:778)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.multiResolve(PsiReferenceExpressionImpl.java:365)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.advancedResolve(PsiReferenceExpressionImpl.java:527)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.resolve(PsiReferenceExpressionImpl.java:826)
at com.android.tools.idea.AndroidPsiUtils.getResourceReferenceType(AndroidPsiUtils.java:302)
at com.android.tools.idea.folding.ResourceFoldingBuilder.findJavaExpressionReference(ResourceFoldingBuilder.java:164)
at com.android.tools.idea.folding.ResourceFoldingBuilder.access$000(ResourceFoldingBuilder.java:47)
at com.android.tools.idea.folding.ResourceFoldingBuilder$1.visitReferenceExpression(ResourceFoldingBuilder.java:94)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.accept(PsiReferenceExpressionImpl.java:805)
at com.intellij.psi.PsiWalkingState.visit(PsiWalkingState.java:70)
at com.intellij.psi.PsiWalkingState.visit(PsiWalkingState.java:27)
at com.intellij.util.WalkingState.walkChildren(WalkingState.java:65)
at com.intellij.util.WalkingState.elementStarted(WalkingState.java:52)
at com.intellij.psi.PsiWalkingState.elementStarted(PsiWalkingState.java:79)
at com.intellij.psi.JavaRecursiveElementWalkingVisitor.visitElement(JavaRecursiveElementWalkingVisitor.java:41)
at com.intellij.psi.PsiElementVisitor.visitFile(PsiElementVisitor.java:35)
at com.intellij.psi.JavaElementVisitor.visitJavaFile(JavaElementVisitor.java:340)
at com.intellij.psi.impl.source.PsiJavaFileBaseImpl.accept(PsiJavaFileBaseImpl.java:482)
at com.android.tools.idea.folding.ResourceFoldingBuilder.buildFoldRegions(ResourceFoldingBuilder.java:91)
at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptorsNoPlaceholderCaching(LanguageFolding.java:92)
at com.intellij.lang.folding.CompositeFoldingBuilder.buildFoldRegions(CompositeFoldingBuilder.java:37)
at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptorsNoPlaceholderCaching(LanguageFolding.java:92)
at com.intellij.lang.folding.LanguageFolding.buildFoldingDescriptors(LanguageFolding.java:75)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.getFoldingsFor(FoldingUpdate.java:243)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.getFoldingsFor(FoldingUpdate.java:223)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.getUpdateResult(FoldingUpdate.java:81)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.lambda$updateFoldRegions$0(FoldingUpdate.java:70)
at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:54)
at com.intellij.util.CachedValueBase.lambda$getValueWithLock$1(CachedValueBase.java:235)
at com.intellij.openapi.util.RecursionManager$1.doPreventingRecursion(RecursionManager.java:117)
at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:75)
at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:236)
at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:43)
at com.intellij.util.CachedValuesManagerImpl.getCachedValue(CachedValuesManagerImpl.java:73)
at com.intellij.codeInsight.folding.impl.FoldingUpdate.updateFoldRegions(FoldingUpdate.java:67)
at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.updateFoldRegions(CodeFoldingManagerImpl.java:229)
at com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl.updateFoldRegionsAsync(CodeFoldingManagerImpl.java:215)
at com.intellij.codeInsight.daemon.impl.CodeFoldingPass.doCollectInformation(CodeFoldingPass.java:42)
at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:52)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$null$1(PassExecutorService.java:434)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1106)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$2(PassExecutorService.java:427)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:625)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:570)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:61)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.doRun(PassExecutorService.java:426)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$run$0(PassExecutorService.java:402)
at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:168)
at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:168)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:400)
at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:171)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
我看了代码,分页查询这块还没有支持呀,有计划吗?
现在生成的sql语句,对于没有赋值的属性,插入null
这样对clickhouse数据库不太友好,clickhouse的字段类型为Nullable(typename)类型,才能插入null,Nullable(typename)
如果生成的sql语句,没有插入null值,对clickhouse友好些
1.4.0版本保存数据:
Member newMember = new Member();
newMember.setNo("100000")
.setName("Pamela")
.setGender(1)
.setRegisteredAtWithJoda(DateTime.now())
.setUpdatedAt(Timestamp.valueOf("2020-10-05 00:00:00"))
.setMobile("15011112222");
Member member = Member.create(newMember, true);
1.4.0版本生成sql信息:
信息: [109ms] INSERT INTO `members` (`no`,`name`,`gender`,`mobile`,`extended_attributes`,`registered_at`,`updated_at`)
VALUES (?,?,?,?,?,?,?), with: [100000,Pamela,1,15011112222,null,2020-12-02 19:54:18.157,2020-10-05 00:00:00.0]
运行下面代码:
Relationship[] memberRelation = new Relationship[]{Order.BELONGS_TO_MEMBER};
Order order = Order.queryByPrimaryKey(1L, memberRelation);
报错:
java.sql.SQLException: Failed to write Order.memberId, because setter method require Integer, but give a Long(1)
at com.github.braisdom.objsql.Databases.sqlBenchmarking(Databases.java:220)
at com.github.braisdom.objsql.DefaultSQLExecutor.query(DefaultSQLExecutor.java:41)
at com.github.braisdom.objsql.DefaultQuery.lambda$execute$0(DefaultQuery.java:49)
at com.github.braisdom.objsql.Databases.execute(Databases.java:193)
at com.github.braisdom.objsql.DefaultQuery.execute(DefaultQuery.java:44)
at com.github.braisdom.objsql.DefaultQuery.queryFirst(DefaultQuery.java:61)
at com.github.braisdom.objsql.example.domains.Order.queryByPrimaryKey(Order.java:15)
at com.github.braisdom.objsql.example.RelationExample.queryBelongsTo(RelationExample.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)
Caused by: com.github.braisdom.objsql.reflection.ReflectionException: Failed to write Order.memberId, because setter method require Integer, but give a Long(1)
at com.github.braisdom.objsql.reflection.PropertyUtils.write(PropertyUtils.java:142)
at com.github.braisdom.objsql.reflection.PropertyUtils.write(PropertyUtils.java:122)
at com.github.braisdom.objsql.reflection.PropertyUtils.write(PropertyUtils.java:118)
at com.github.braisdom.objsql.BeanModelDescriptor.setFieldValue(BeanModelDescriptor.java:279)
at com.github.braisdom.objsql.DomainModelListHandler.createBean(DefaultSQLExecutor.java:120)
at com.github.braisdom.objsql.DomainModelListHandler.handle(DefaultSQLExecutor.java:88)
at com.github.braisdom.objsql.DomainModelListHandler.handle(DefaultSQLExecutor.java:68)
at com.github.braisdom.objsql.jdbc.QueryRunner.query(QueryRunner.java:343)
at com.github.braisdom.objsql.jdbc.QueryRunner.query(QueryRunner.java:207)
at com.github.braisdom.objsql.DefaultSQLExecutor.lambda$query$0(DefaultSQLExecutor.java:42)
at com.github.braisdom.objsql.Databases.sqlBenchmarking(Databases.java:206)
... 30 more
As I go through the source code,I found the comment incomplete. Please complete the comment.
2020-11-14 17:11:09.963 WARN 7360 --- [nio-8080-exec-6] .m.m.a.ExceptionHandlerExceptionResolver : Resolved exception caused by Handler execution: java.lang.IllegalStateException: The connectionFactory cannot be null
这个错啥意思?不懂了
com.github.braisdom:objective-sql:1.3.6依赖下报org.hibernate:hibernate-validator:5.3.6.final(omitted for duplicate)
我运行了官方的示例,生成的SQL 如下:
SELECT ((((SUM(`T0`.`amount` ) / SUM(`T0`.`quantity` ) )) * 100))
FROM `orders` AS `T0`
WHERE ((`T0`.`quantity` > 30) AND
`T0`.`sales_at` BETWEEN '2020-10-10 00:00:00' AND '2020-10-30 23:59:59')
GROUP BY `T0`.`product_id`
表达式里的括号太多了,看不太清。
Member.update("name = 'Smith => Jackson'", "name = 'Alice'");
这觉得上面的方法是不是可以修改为这样:
String newName = "Smith => Jackson";
String oldName = "Alice";
Member.update("name = ?", "name = ?", newName, oldName);
这样的话可以灵活一点。
provider: com.github.braisdom.objsql.intellij.ObjSqlPsiAugmentProvider@7880b09c
java.lang.IllegalArgumentException: Argument for @NotNull parameter 'type' of com/github/braisdom/objsql/intellij/ObjsqlLightFieldBuilder.<init> must not be null
at com.github.braisdom.objsql.intellij.ObjsqlLightFieldBuilder.$$$reportNull$$$0(ObjsqlLightFieldBuilder.java)
at com.github.braisdom.objsql.intellij.ObjsqlLightFieldBuilder.<init>(ObjsqlLightFieldBuilder.java)
at com.github.braisdom.objsql.intellij.ModelMethodBuilder.buildTableName(ModelMethodBuilder.java:39)
at com.github.braisdom.objsql.intellij.ModelMethodBuilder.buildField(ModelMethodBuilder.java:17)
at com.github.braisdom.objsql.intellij.ObjSqlPsiAugmentProvider$ObjSqlCachedValueProvider.lambda$compute$0(ObjSqlPsiAugmentProvider.java:110)
at com.intellij.openapi.util.RecursionManager$1.doPreventingRecursion(RecursionManager.java:112)
at com.github.braisdom.objsql.intellij.ObjSqlPsiAugmentProvider$ObjSqlCachedValueProvider.compute(ObjSqlPsiAugmentProvider.java:96)
at com.intellij.psi.util.CachedValuesManager$1.compute(CachedValuesManager.java:153)
at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:54)
at com.intellij.util.CachedValueBase.lambda$getValueWithLock$1(CachedValueBase.java:235)
at com.intellij.openapi.util.RecursionManager$1.doPreventingRecursion(RecursionManager.java:112)
at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:71)
at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:236)
at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:43)
at com.intellij.util.CachedValuesManagerImpl.getCachedValue(CachedValuesManagerImpl.java:76)
at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:150)
at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:120)
at com.github.braisdom.objsql.intellij.ObjSqlPsiAugmentProvider.getAugments(ObjSqlPsiAugmentProvider.java:51)
at com.intellij.psi.augment.PsiAugmentProvider.lambda$getAugments$0(PsiAugmentProvider.java:58)
at com.intellij.util.containers.ConcurrentFactoryMap$2.create(ConcurrentFactoryMap.java:174)
at com.intellij.util.containers.ConcurrentFactoryMap.get(ConcurrentFactoryMap.java:40)
at com.intellij.psi.augment.PsiAugmentProvider.getAugments(PsiAugmentProvider.java:61)
at com.intellij.psi.augment.PsiAugmentProvider.lambda$collectAugments$2(PsiAugmentProvider.java:110)
at com.intellij.psi.augment.PsiAugmentProvider.forEach(PsiAugmentProvider.java:177)
at com.intellij.psi.augment.PsiAugmentProvider.collectAugments(PsiAugmentProvider.java:109)
at com.intellij.psi.impl.source.ClassInnerStuffCache.lambda$getFieldsMap$7(ClassInnerStuffCache.java:164)
at com.intellij.util.containers.ConcurrentFactoryMap$2.create(ConcurrentFactoryMap.java:174)
at com.intellij.util.containers.ConcurrentFactoryMap.get(ConcurrentFactoryMap.java:40)
at com.intellij.psi.impl.source.ClassInnerStuffCache.findFieldByName(ClassInnerStuffCache.java:61)
at com.intellij.psi.impl.source.PsiClassImpl.findFieldByName(PsiClassImpl.java:345)
at com.intellij.psi.impl.PsiClassImplUtil.processCachedMembersByName(PsiClassImplUtil.java:496)
at com.intellij.psi.impl.PsiClassImplUtil.processDeclarationsInClass(PsiClassImplUtil.java:458)
at com.intellij.psi.impl.PsiClassImplUtil.processDeclarationsInClass(PsiClassImplUtil.java:435)
at com.intellij.psi.impl.source.PsiClassImpl.processDeclarations(PsiClassImpl.java:474)
at com.intellij.psi.scope.util.PsiScopesUtil.treeWalkUp(PsiScopesUtil.java:75)
at com.intellij.psi.scope.util.PsiScopesUtil.treeWalkUp(PsiScopesUtil.java:54)
at com.intellij.psi.scope.util.PsiScopesUtil.resolveAndWalk(PsiScopesUtil.java:221)
at com.intellij.psi.scope.util.PsiScopesUtil.resolveAndWalk(PsiScopesUtil.java:150)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.resolveToVariable(PsiReferenceExpressionImpl.java:332)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.resolve(PsiReferenceExpressionImpl.java:243)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.access$000(PsiReferenceExpressionImpl.java:45)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$OurGenericsResolver.resolve(PsiReferenceExpressionImpl.java:183)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$OurGenericsResolver.resolve(PsiReferenceExpressionImpl.java:173)
at com.intellij.psi.impl.source.resolve.ResolveCache.lambda$resolveWithCaching$2(ResolveCache.java:185)
at com.intellij.openapi.util.Computable.get(Computable.java:17)
at com.intellij.psi.impl.source.resolve.ResolveCache.lambda$loggingResolver$3(ResolveCache.java:227)
at com.intellij.openapi.util.RecursionManager$1.doPreventingRecursion(RecursionManager.java:112)
at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:71)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolve(ResolveCache.java:204)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:185)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$OurGenericsResolver$1.elementFinished(PsiReferenceExpressionImpl.java:222)
at com.intellij.psi.JavaRecursiveElementWalkingVisitor$1.elementFinished(JavaRecursiveElementWalkingVisitor.java:35)
at com.intellij.psi.JavaRecursiveElementWalkingVisitor$1.elementFinished(JavaRecursiveElementWalkingVisitor.java:32)
at com.intellij.util.WalkingState.next(WalkingState.java:94)
at com.intellij.util.WalkingState.walkChildren(WalkingState.java:58)
at com.intellij.util.WalkingState.elementStarted(WalkingState.java:49)
at com.intellij.psi.PsiWalkingState.elementStarted(PsiWalkingState.java:76)
at com.intellij.psi.JavaRecursiveElementWalkingVisitor.visitElement(JavaRecursiveElementWalkingVisitor.java:41)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$OurGenericsResolver$1.visitReferenceExpression(PsiReferenceExpressionImpl.java:215)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.accept(PsiReferenceExpressionImpl.java:784)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$OurGenericsResolver.resolveAllQualifiers(PsiReferenceExpressionImpl.java:205)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$OurGenericsResolver.resolve(PsiReferenceExpressionImpl.java:182)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$OurGenericsResolver.resolve(PsiReferenceExpressionImpl.java:173)
at com.intellij.psi.impl.source.resolve.ResolveCache.lambda$resolveWithCaching$2(ResolveCache.java:185)
at com.intellij.openapi.util.Computable.get(Computable.java:17)
at com.intellij.psi.impl.source.resolve.ResolveCache.lambda$loggingResolver$3(ResolveCache.java:227)
at com.intellij.openapi.util.RecursionManager$1.doPreventingRecursion(RecursionManager.java:112)
at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:71)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolve(ResolveCache.java:204)
at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:185)
at com.intellij.psi.impl.PsiImplUtil.multiResolveImpl(PsiImplUtil.java:802)
at com.intellij.psi.impl.PsiImplUtil.multiResolveImpl(PsiImplUtil.java:794)
at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.multiResolve(PsiReferenceExpressionImpl.java:338)
at com.intellij.psi.impl.source.tree.java.PsiMethodCallExpressionImpl$TypeEvaluator.fun(PsiMethodCallExpressionImpl.java:143)
at com.intellij.psi.impl.source.tree.java.PsiMethodCallExpressionImpl$TypeEvaluator.fun(PsiMethodCallExpressionImpl.java:138)
at com.intellij.psi.impl.source.resolve.JavaResolveCache.lambda$getType$0(JavaResolveCache.java:65)
at com.intellij.psi.util.CachedValuesManager.lambda$getProjectPsiDependentCache$0(CachedValuesManager.java:132)
at com.intellij.psi.util.CachedValuesManager$1.compute(CachedValuesManager.java:153)
at com.intellij.psi.impl.PsiCachedValueImpl.doCompute(PsiCachedValueImpl.java:54)
at com.intellij.util.CachedValueBase.lambda$getValueWithLock$1(CachedValueBase.java:235)
at com.intellij.openapi.util.RecursionManager$1.doPreventingRecursion(RecursionManager.java:112)
at com.intellij.openapi.util.RecursionManager.doPreventingRecursion(RecursionManager.java:71)
at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:236)
at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:43)
at com.intellij.util.CachedValuesManagerImpl.getCachedValue(CachedValuesManagerImpl.java:76)
at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:150)
at com.intellij.psi.util.CachedValuesManager.getProjectPsiDependentCache(CachedValuesManager.java:131)
at com.intellij.psi.impl.source.resolve.JavaResolveCache.getType(JavaResolveCache.java:65)
at com.intellij.psi.impl.source.tree.java.PsiMethodCallExpressionImpl.getType(PsiMethodCallExpressionImpl.java:38)
at org.jetbrains.uast.java.JavaAbstractUExpression.getExpressionType(JavaAbstractUElement.kt:133)
at com.intellij.codeInsight.daemon.impl.IconLineMarkerProvider.getLineMarkerInfo(IconLineMarkerProvider.java:45)
at com.intellij.codeInsight.daemon.impl.LineMarkersPass.queryProviders(LineMarkersPass.java:163)
at com.intellij.codeInsight.daemon.impl.LineMarkersPass.lambda$queryLineMarkersForInjected$8(LineMarkersPass.java:224)
at com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil.probeElementsUp(InjectedLanguageUtil.java:359)
at com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil.enumerate(InjectedLanguageUtil.java:164)
at com.intellij.psi.impl.source.tree.injected.InjectedLanguageManagerImpl.enumerateEx(InjectedLanguageManagerImpl.java:311)
at com.intellij.codeInsight.daemon.impl.LineMarkersPass.queryLineMarkersForInjected(LineMarkersPass.java:216)
at com.intellij.codeInsight.daemon.impl.LineMarkersPass.queryProviders(LineMarkersPass.java:178)
at com.intellij.codeInsight.daemon.impl.LineMarkersPass.lambda$doCollectInformation$3(LineMarkersPass.java:88)
at com.intellij.codeInsight.daemon.impl.Divider.divideInsideAndOutsideInOneRoot(Divider.java:81)
at com.intellij.codeInsight.daemon.impl.LineMarkersPass.doCollectInformation(LineMarkersPass.java:83)
at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:54)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$1(PassExecutorService.java:399)
at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1110)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$2(PassExecutorService.java:392)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:629)
at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:581)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.doRun(PassExecutorService.java:391)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$run$0(PassExecutorService.java:367)
at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:170)
at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:182)
at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:365)
at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:181)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
应该是 Active Record,你写成了Active Recored。
大佬,我们用PostgreSQL 数据,插入数据报错,帮忙看一下,急!!!!
java.sql.SQLException: Batch entry 0 INSERT INTO "members" ("no","name","gender","mobile","extended_attributes","registered_at","updated_at") VALUES ('200001','Alice',0,'15011112222','null',NULL,NULL)
RETURNING * was aborted: ERROR: column "registered_at" is of type timestamp without time zone but expression is of type character varying
建议:You will need to rewrite or cast the expression.
位置:129 Call getNextException to see other errors in the batch. Query: INSERT INTO "members" ("no","name","gender","mobile","extended_attributes","registered_at","updated_at") VALUES (?,?,?,?,?,?,?) Parameters: [[200001, Alice, 0, 15011112222, null, null, null], [200003, Mary, 0, 15011112222, null, null, null], [200004, Denise, 0, 15011112222, null, null, null]]
at com.github.braisdom.objsql.jdbc.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:369)
at com.github.braisdom.objsql.jdbc.QueryRunner.insertBatch(QueryRunner.java:687)
at com.github.braisdom.objsql.jdbc.QueryRunner.insertBatch(QueryRunner.java:643)
at com.github.braisdom.objsql.DefaultSQLExecutor.lambda$insert$2(DefaultSQLExecutor.java:58)
at com.github.braisdom.objsql.Databases.sqlBenchmarking(Databases.java:206)
at com.github.braisdom.objsql.DefaultSQLExecutor.insert(DefaultSQLExecutor.java:57)
at com.github.braisdom.objsql.DefaultPersistence.lambda$insert$1(DefaultPersistence.java:123)
at com.github.braisdom.objsql.Databases.execute(Databases.java:193)
at com.github.braisdom.objsql.DefaultPersistence.insert(DefaultPersistence.java:105)
at com.github.braisdom.objsql.example.domains.Member.create(Member.java:15)
at com.github.braisdom.objsql.example.PersistenceExample.createMemberWithArray(PersistenceExample.java:121)
at com.github.braisdom.objsql.example.PersistenceExample.executeDeleteDenise(PersistenceExample.java:176)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)
Caused by: java.sql.BatchUpdateException: Batch entry 0 INSERT INTO "members" ("no","name","gender","mobile","extended_attributes","registered_at","updated_at") VALUES ('200001','Alice',0,'15011112222','null',NULL,NULL)
RETURNING * was aborted: ERROR: column "registered_at" is of type timestamp without time zone but expression is of type character varying
建议:You will need to rewrite or cast the expression.
位置:129 Call getNextException to see other errors in the batch.
at org.postgresql.jdbc.BatchResultHandler.handleCompletion(BatchResultHandler.java:199)
at org.postgresql.jdbc.PgStatement.internalExecuteBatch(PgStatement.java:855)
at org.postgresql.jdbc.PgStatement.executeBatch(PgStatement.java:893)
at org.postgresql.jdbc.PgPreparedStatement.executeBatch(PgPreparedStatement.java:1644)
at com.github.braisdom.objsql.jdbc.QueryRunner.insertBatch(QueryRunner.java:685)
... 33 more
我在做一个项目,里面用了中位数和百分位数的计算,突然发现mysql 不支持,看了clickhouse 和hive 写法不太一样
想想老哥的项目能提供统一API 就好很多了。
1)为什么PrimaryKey 是通过DomainModel 设置的,不通过PrimaryKey Annotation 自定义呢?
2)我可以取消一个模型的主键吗?
代码如下:
private static void updateSmithMember() throws SQLException {
Map<String, Object> extendedAttributes = new HashMap<>();
extendedAttributes.put("hobbies", new String[]{"Play football", "Cooking"});
extendedAttributes.put("age", 28);
Member newMember = new Member()
.setName("Smith => Jackson")
.setExtendedAttributes(extendedAttributes);
Member.update(12, newMember, true);
}
我跟踪进去了,好像:skipNullValueOnUpdating 有问题
ObjectiveSQL 1.3.7
插入代码:
Order order = new Order()
.setNo("202000001")
.setMemberId(3)
.setAmount(3.5d)
.setQuantity(100.3d)
.setSalesAt(Timestamp.valueOf("2020-05-01 09:30:00"));
order.save(false, true);
异常信息
java.sql.SQLException: ERROR: column "sales_at" is of type timestamp without time zone but expression is of type character varying
建议:You will need to rewrite or cast the expression.
位置:92 Query: INSERT INTO "orders" ("no","member_id","amount","quantity","sales_at") VALUES (?,?,?,?,?) Parameters: [202000001, 3, 3.5, 100.3, 2020-05-01 09:30:00.0]
at com.github.braisdom.objsql.jdbc.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:369)
at com.github.braisdom.objsql.jdbc.QueryRunner.insert(QueryRunner.java:605)
at com.github.braisdom.objsql.jdbc.QueryRunner.insert(QueryRunner.java:560)
at com.github.braisdom.objsql.DefaultSQLExecutor.lambda$insert$1(DefaultSQLExecutor.java:50)
at com.github.braisdom.objsql.Databases.sqlBenchmarking(Databases.java:206)
at com.github.braisdom.objsql.DefaultSQLExecutor.insert(DefaultSQLExecutor.java:49)
at com.github.braisdom.objsql.DefaultPersistence.lambda$insert$0(DefaultPersistence.java:82)
at com.github.braisdom.objsql.Databases.execute(Databases.java:193)
at com.github.braisdom.objsql.DefaultPersistence.insert(DefaultPersistence.java:70)
at com.github.braisdom.objsql.DefaultPersistence.save(DefaultPersistence.java:52)
at com.github.braisdom.objsql.example.domains.Order.save(Order.java:15)
at com.github.braisdom.objsql.example.PersistenceExample.createOrder(PersistenceExample.java:191)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)
@DomainModel
class DemoClass {
}
System.out.println(DemoClass.TABLE_NAME);
输出(难道不应该是” demo_classes”吗?):
demo_class
我在execute 上进行Quckfix 操作, “Add throws on method",生成的代码如下:
public static List<Order> queryOrders(String begin, String end, String[] memberNos)SQLSyntaxException
{
Order.Table order = Order.asTable();
Member.Table member = Member.asTable();
Select select = new Select();
return select.execute(DatabaseType.MySQL, Order.class);
}
很明显有问题,
mysql表没有主键自增会报错
DDL:
CREATE TABLE `objective_sql`.`members`(
`id` INT UNSIGNED,
`no` VARCHAR(100),
`name` VARCHAR(100),
`gender` INT(2),
`mobile` VARCHAR(11),
`extended_attributes` VARCHAR(512),
`registered_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
新增代码:
Member newMember = new Member();
newMember.setId(2L)
.setNo("100000")
.setName("Pamela")
.setGender(1)
.setRegisteredAtWithJoda(DateTime.now())
.setUpdatedAt(Timestamp.valueOf("2020-10-05 00:00:00"))
.setMobile("15011112222");
Member member = Member.create(newMember, true, true);
报错信息:
java.sql.SQLException: Field 'id' doesn't have a default value Query: INSERT INTO `members` (`no`,`name`,`gender`,`mobile`,`extended_attributes`,`registered_at`,`updated_at`) VALUES (?,?,?,?,?,?,?) Parameters: [100000, Pamela, 1, 15011112222, null, 2020-11-26 17:35:54.318, 2020-10-05 00:00:00.0]
at com.github.braisdom.objsql.jdbc.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:369)
at com.github.braisdom.objsql.jdbc.QueryRunner.insert(QueryRunner.java:605)
at com.github.braisdom.objsql.jdbc.QueryRunner.insert(QueryRunner.java:560)
at com.github.braisdom.objsql.DefaultSQLExecutor.lambda$insert$1(DefaultSQLExecutor.java:50)
at com.github.braisdom.objsql.Databases.sqlBenchmarking(Databases.java:229)
at com.github.braisdom.objsql.DefaultSQLExecutor.insert(DefaultSQLExecutor.java:49)
at com.github.braisdom.objsql.DefaultPersistence.lambda$insert$0(DefaultPersistence.java:82)
at com.github.braisdom.objsql.Databases.execute(Databases.java:216)
at com.github.braisdom.objsql.DefaultPersistence.insert(DefaultPersistence.java:70)
at com.github.braisdom.objsql.example.domains.Member.create(Member.java:15)
at com.github.braisdom.objsql.example.PersistenceExample.createSimpleMemberSkipValidation(PersistenceExample.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1092)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1040)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1347)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1025)
at com.github.braisdom.objsql.jdbc.QueryRunner.insert(QueryRunner.java:601)
... 32 more
clickhouse表不能设置主键自增,现在的版本,支不支持clickhouse数据库阿
我使用ObjectiveSql-IntelliJ-Plugin是1.2.8版本,插件还没有支持分页
据我所知,limit, offset 只有MySQL 和SQLite 两种类型的数据库支持,Select 是一个能用的,放这两个语法在里面不太合适吧。
java.lang.Throwable: Non-idempotent computation: it returns different results when invoked multiple times or on different threads:
Light PSI class: Table != Light PSI class: Table
which is 0th element of [Light PSI class: Table] and [Light PSI class: Table]
Recomputation gives com.intellij.util.CachedValueBase$Data@19385316 which is different from both values
Recomputation log:
Resolving PsiJavaCodeReferenceElement:Relation of class com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl
at com.intellij.openapi.diagnostic.Logger.error(Logger.java:143)
at com.intellij.util.IdempotenceChecker.reportFailure(IdempotenceChecker.java:92)
at com.intellij.util.IdempotenceChecker.checkEquivalence(IdempotenceChecker.java:79)
at com.intellij.util.CachedValueBase.getValueWithLock(CachedValueBase.java:245)
at com.intellij.psi.impl.PsiCachedValueImpl.getValue(PsiCachedValueImpl.java:43)
at com.intellij.util.CachedValuesManagerImpl.getCachedValue(CachedValuesManagerImpl.java:76)
at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:150)
at com.intellij.psi.util.CachedValuesManager.getCachedValue(CachedValuesManager.java:120)
at com.github.braisdom.objsql.intellij.ObjSqlPsiAugmentProvider.getAugments(ObjSqlPsiAugmentProvider.java:50)
at com.intellij.psi.augment.PsiAugmentProvider.lambda$getAugments$0(PsiAugmentProvider.java:58)
at com.intellij.util.containers.ConcurrentFactoryMap$2.create(ConcurrentFactoryMap.java:174)
at com.intellij.util.containers.ConcurrentFactoryMap.get(ConcurrentFactoryMap.java:40)
at com.intellij.psi.augment.PsiAugmentProvider.getAugments(PsiAugmentProvider.java:61)
at com.intellij.psi.augment.PsiAugmentProvider.lambda$collectAugments$2(PsiAugmentProvider.java:110)
at com.intellij.psi.augment.PsiAugmentProvider.forEach(PsiAugmentProvider.java:177)
at com.intellij.psi.augment.PsiAugmentProvider.collectAugments(PsiAugmentProvider.java:109)
at com.intellij.psi.impl.source.ClassInnerStuffCache.lambda$getInnerClassesMap$10(ClassInnerStuffCache.java:196)
at com.intellij.util.containers.ConcurrentFactoryMap$2.create(ConcurrentFactoryMap.java:174)
at com.intellij.util.containers.ConcurrentFactoryMap.get(ConcurrentFactoryMap.java:40)
at com.intellij.psi.impl.source.ClassInnerStuffCache.findInnerClassByName(ClassInnerStuffCache.java:80)
at com.intellij.psi.impl.source.PsiClassImpl.findInnerClassByName(PsiClassImpl.java:377)
at com.intellij.psi.impl.PsiClassImplUtil.processCachedMembersByName(PsiClassImplUtil.java:540)
at com.intellij.psi.impl.PsiClassImplUtil.processDeclarationsInClass(PsiClassImplUtil.java:458)
at com.intellij.psi.impl.PsiClassImplUtil.processDeclarationsInClass(PsiClassImplUtil.java:435)
at com.intellij.psi.impl.source.PsiClassImpl.processDeclarations(PsiClassImpl.java:474)
at com.intellij.psi.scope.util.PsiScopesUtil.treeWalkUp(PsiScopesUtil.java:75)
at com.intellij.psi.scope.util.PsiScopesUtil.treeWalkUp(PsiScopesUtil.java:54)
at com.intellij.psi.scope.util.PsiScopesUtil.resolveAndWalk(PsiScopesUtil.java:221)
at com.intellij.psi.scope.util.PsiScopesUtil.resolveAndWalk(PsiScopesUtil.java:150)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl.resolve(PsiJavaCodeReferenceElementImpl.java:489)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl.access$100(PsiJavaCodeReferenceElementImpl.java:44)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl$OurGenericsResolver.resolve(PsiJavaCodeReferenceElementImpl.java:375)
at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl$OurGenericsResolver.resolve(PsiJavaCodeReferenceElementImpl.java:368)
at com.intellij.psi.impl.source.resolve.ResolveCache.lambda$resolveWithCaching$2(ResolveCache.java:185)
at com.intellij.openapi.util.Computable.get(Computable.java:17)
使用sqlserver保持数据的时候会报错,怎么解决啊
数据模型:
@DomainModel
public class Member {
@Size(min = 5, max = 20)
private String no;
@Queryable
private String name;
@Queryable
private Integer gender;
private String mobile;
}
数据保存:
Member member = Member.create(newMember, true, true);
报错信息:
java.sql.SQLException: Failed to write Member.id, because setter method require Long, but give a BigDecimal(1)
at com.github.braisdom.objsql.Databases.sqlBenchmarking(Databases.java:220)
at com.github.braisdom.objsql.DefaultSQLExecutor.insert(DefaultSQLExecutor.java:49)
at com.github.braisdom.objsql.DefaultPersistence.lambda$insert$0(DefaultPersistence.java:82)
at com.github.braisdom.objsql.Databases.execute(Databases.java:193)
at com.github.braisdom.objsql.DefaultPersistence.insert(DefaultPersistence.java:70)
at com.github.braisdom.objsql.example.domains.Member.create(Member.java:15)
at com.github.braisdom.objsql.example.PersistenceExample.createSimpleMemberSkipValidation(PersistenceExample.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: com.github.braisdom.objsql.reflection.ReflectionException: Failed to write Member.id, because setter method require Long, but give a BigDecimal(1)
at com.github.braisdom.objsql.reflection.PropertyUtils.write(PropertyUtils.java:142)
at com.github.braisdom.objsql.reflection.PropertyUtils.write(PropertyUtils.java:122)
at com.github.braisdom.objsql.reflection.PropertyUtils.write(PropertyUtils.java:118)
at com.github.braisdom.objsql.BeanModelDescriptor.setFieldValue(BeanModelDescriptor.java:279)
at com.github.braisdom.objsql.BeanModelDescriptor.setGeneratedKey(BeanModelDescriptor.java:135)
at com.github.braisdom.objsql.DomainModelHandler.handle(DefaultSQLExecutor.java:162)
at com.github.braisdom.objsql.jdbc.QueryRunner.insert(QueryRunner.java:603)
at com.github.braisdom.objsql.jdbc.QueryRunner.insert(QueryRunner.java:560)
at com.github.braisdom.objsql.DefaultSQLExecutor.lambda$insert$1(DefaultSQLExecutor.java:50)
at com.github.braisdom.objsql.Databases.sqlBenchmarking(Databases.java:206)
... 29 more
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.github.braisdom.objsql.reflection.PropertyUtils.lambda$write$3(PropertyUtils.java:132)
at com.github.braisdom.objsql.reflection.PropertyUtils.withAccessibleObject(PropertyUtils.java:325)
at com.github.braisdom.objsql.reflection.PropertyUtils.write(PropertyUtils.java:132)
... 38 more
active record模式不错,有不少人喜欢。
是sqlhelper是一款强大的sql开发套件,支持分页、ddl dump,sql格式化等。这些功能都是独立于任何现有orm框架的,也是可以和他们无缝对接的。所以希望可以接入咱这款产品
SysUserDB.Table sysuser =SysUserDB.asTable();
Select select = new Select();
select.project(sysuser.deptId,sysuser.email,sysuser.id,sysuser.name,sysuser.password,sysuser.roles,sysuser.status)
.from(sysuser)
.where(sysuser.id.eq(4));
查询字段过多时一个一个写字段不方便!
使用mysql保存数据报错
数据模型:
@DomainModel(primaryClass = Integer.class)
public class Member {
@Size(min = 5, max = 20)
private String no;
@Queryable
private String name;
@Queryable
private Integer gender;
private String mobile;
}
数据保存:
Member member = Member.create(newMember, true, true);
报错信息:
com.github.braisdom.objsql.reflection.ReflectionException: Failed to write Member.id, because setter method require Integer, but give a Long(10)
at com.github.braisdom.objsql.reflection.PropertyUtils.write(PropertyUtils.java:142)
at com.github.braisdom.objsql.reflection.PropertyUtils.write(PropertyUtils.java:122)
at com.github.braisdom.objsql.reflection.PropertyUtils.write(PropertyUtils.java:118)
at com.github.braisdom.objsql.reflection.PropertyUtils.populate(PropertyUtils.java:191)
at com.github.braisdom.objsql.example.domains.Member.newInstanceFrom(Member.java:15)
at com.github.braisdom.objsql.example.PersistenceExample.createSimpleMemberCopyFromMap(PersistenceExample.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.github.braisdom.objsql.reflection.PropertyUtils.lambda$write$3(PropertyUtils.java:132)
at com.github.braisdom.objsql.reflection.PropertyUtils.withAccessibleObject(PropertyUtils.java:325)
at com.github.braisdom.objsql.reflection.PropertyUtils.write(PropertyUtils.java:132)
... 28 more
使用中发现代码生成的ID的类型是long类型,IntelJ插件提示的数据类型是int类型。
@DomainModel
public class Member {};
Member.Table member = Member.asTable();
Select select = new Select();
select.project(member.no,member.name).from(member).where(member.id.eq(1)).groupBy(member.no,member.name);`
Table 'objective_sql.members' doesn't exist
异常信息如下:
com.microsoft.sqlserver.jdbc.SQLServerException: Cannot open database "objective_sql" requested by the login. The login failed. ClientConnectionId:6bcf60cc-d6e4-4f76-a656-93e20b622cff
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:262)
at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:283)
at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:129)
at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:37)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:5233)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:3988)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:85)
at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:3932)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:7375)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:3206)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:2713)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:2362)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:2213)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1276)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:861)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at com.github.braisdom.objsql.example.MSSQLExample$MSSQLConnectionFactory.getConnection(MSSQLExample.java:25)
at com.github.braisdom.objsql.Databases.execute(Databases.java:192)
at com.github.braisdom.objsql.Databases.execute(Databases.java:173)
at com.github.braisdom.objsql.Databases.execute(Databases.java:169)
at com.github.braisdom.objsql.example.MSSQLExample.initializeSchemas(MSSQLExample.java:39)
at com.github.braisdom.objsql.example.MSSQLExample.prepareEnv(MSSQLExample.java:47)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220)
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)
Could not transfer artifact com.github.braisdom:objsql:pom:1.3 from/to releases (https://oss.sonatype.org/service/local/staging/deploy/maven2): Authentication failed for https://oss.sonatype.org/service/local/staging/deploy/maven2/com/github/braisdom/objsql/1.3/objsql-1.3.pom 401 Unauthorized
Could not transfer artifact com.github.braisdom:objsql:pom:1.3 from/to releases (https://oss.sonatype.org/service/local/staging/deploy/maven2): Authentication failed for https://oss.sonatype.org/service/local/staging/deploy/maven2/com/github/braisdom/objsql/1.3/objsql-1.3.pom 401 Unauthorized
java.lang.IllegalStateException: The connectionFactory cannot be null
<dependency>
<groupId>com.github.braisdom</groupId>
<artifactId>objsql-springboot</artifactId>
<version>${springboot.version}</version>
</dependency>
跟lombok整合会出现lombok不好用,但有时候好用,可能是编译顺序导致的吧
private void prepareColumnToPropertyOverrides(Class<T> rowClass) {
Field[] fields = rowClass.getDeclaredFields();
Arrays.stream(fields).forEach(field -> {
PrimaryKey primaryKey = field.getAnnotation(PrimaryKey.class);
Column column = field.getAnnotation(Column.class);
if (primaryKey != null) {
String columnName = StringUtil.isBlank(primaryKey.name())
? WordUtil.underscore(field.getName()) : primaryKey.name();
columnToField.put(columnName, field);
columnToField.put(columnName.toUpperCase(), field);
} else if (column != null) {
String columnName = StringUtil.isBlank(column.name())
? WordUtil.underscore(field.getName()) : primaryKey.name();
columnToField.put(columnName.toUpperCase(), field);
columnToField.put(columnName, field);
} else {
columnToField.put(WordUtil.underscore(field.getName()), field);
columnToField.put(WordUtil.underscore(field.getName()).toUpperCase(), field);
}
});
}
进入第一个 else if 中说明 primaryKey 为 null。取用primaryKey取值导致 NullPointException
Java 代码:
@DomainModel
public class User {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Maven 编译时错误:
Error:(6,8) java: 已在类 com.github.braisdom.objsql.benchmark.User中定义了变量 id
在源码,是否可以把模块名和目录名保持一致,保持一致看着会舒服些
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.