Code Monkey home page Code Monkey logo

objectivesql's People

Contributors

activepirate avatar blindpirate avatar catchex avatar deepsourcebot avatar faridonfire avatar huoxi-any avatar liuyan-carl avatar yeongher avatar yzstu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

objectivesql's Issues

这个API 设计的很诡异

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 报错

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

HSQLDB 支持有问题

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

it returns different results when invoked multiple times or on different threads: 38 != 30

我在编码的过程中,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)

异常提示中表别名的建议

image

一个复杂查询里,涉及多张表,T0, T1 这些名称的表示很难找到原始的表,能不能将原始表带上呀。

生成插入sql语句的建议

现在生成的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]

Failed to write Order.memberId, because setter method require Integer

运行下面代码:

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

异常提示不准确

我跟踪后发现是MemberUser 类没有增加 DomainModel Annotation,但异常信息如下:

image

image

为啥生成的SQL 里太多括号呀?

我运行了官方的示例,生成的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`

表达式里的括号太多了,看不太清。

Update 方法参数问题

Member.update("name = 'Smith => Jackson'", "name = 'Alice'");

这觉得上面的方法是不是可以修改为这样:

String newName = "Smith => Jackson";
String oldName = "Alice";
Member.update("name = ?", "name = ?", newName, oldName);

这样的话可以灵活一点。

我的IntelliJ IDEA 一直报这个错误,不影响,看着难受

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)

PostgreSQL 插件错误(急!!!!)

大佬,我们用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 就好很多了。

感觉PrimaryKey 的设计比较诡异

1)为什么PrimaryKey 是通过DomainModel 设置的,不通过PrimaryKey Annotation 自定义呢?
2)我可以取消一个模型的主键吗?

运行 updateSmithMember 其它属性全部为NULL 了,急!!

代码如下:

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 有问题

在PostgreSQL 中插入Timestamp 类型报错

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)

Quickfix error

我在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表没有主键自增会报错怎么处理

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

IntelliJ 插件报错

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)

java.sql.SQLException: Failed to write Member.id, because setter method require Long, but give a BigDecimal(1)

使用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

希望可以接入sqlhelper

active record模式不错,有不少人喜欢。
是sqlhelper是一款强大的sql开发套件,支持分页、ddl dump,sql格式化等。这些功能都是独立于任何现有orm框架的,也是可以和他们无缝对接的。所以希望可以接入咱这款产品

com.github.braisdom.objsql.reflection.ReflectionException: Failed to write Member.id, because setter method require Integer, but give a Long(10)

使用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

通过实体类生成表名时,表名变成了复数问题

场景:

@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

运行MS SQL Server 单元测试的时候报错

异常信息如下:

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)

打开Example 项目 Maven 报错

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

我集成了objsql-spring 报错

java.lang.IllegalStateException: The connectionFactory cannot be null
        <dependency>
            <groupId>com.github.braisdom</groupId>
            <artifactId>objsql-springboot</artifactId>
            <version>${springboot.version}</version>
        </dependency>

关联对象查询 sql语句正常但是返回NullPointerException

image

关联查询出现了java.lang.NullPointerException

  1. 进行一对多查询时报null指针异常
Member.queryAll(Member.HAS_MANY_ORDERS);
  1. 查询之后日志打印的sql可以直接放到数据库查询
SELECT * FROM users_login_logs WHERE  user_id IN (1,17,18)

我做的尝试

  1. 检查数据库字段与类属性是否拼写错
    1. 数据库与类对应
  2. 单表分别查询(都没问题)

代码BUG

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: 已在类 com.github.braisdom.objsql.benchmark.User中定义了变量 id

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.