web-dev-qa-db-ja.com

Javaスタックトレースで$$と<生成>はどういう意味ですか?

私は何度もこのようなスタックトレースを取得します(紛らわしい行の矢印を参照してください):

_org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [PRIMARY]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
                at org.springframework.orm.hibernate5.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.Java:164)
                at org.springframework.orm.hibernate5.HibernateTransactionManager.convertHibernateAccessException(HibernateTransactionManager.Java:741)
                at org.springframework.orm.hibernate5.HibernateTransactionManager.doCommit(HibernateTransactionManager.Java:589)
                at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.Java:761)
                at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.Java:730)
                at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.Java:485)
                at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.Java:291)
                at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.Java:96)
                at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.Java:179)
                at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.Java:653)
--------->      at com.panpwr.admin.services.detector.SimpleDetectorPersistenceService$$EnhancerBySpringCGLIB$$66303639.saveComplexRuleAndActionTemplates(<generated>)
                at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
                at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
...
...
...
_

$$記号とは何ですか?また、この行で「生成された」とはどういう意味ですか? com.panpwr.admin.services.detector.SimpleDetectorPersistenceService$$EnhancerBySpringCGLIB$$66303639.saveComplexRuleAndActionTemplates(<generated>)

そして、なぜそれは実行されたメソッドだけを言い、その中の行は言わないのですか?

19
user1028741

$は、クラス名で使用できる文字です。

SimpleDetectorPersistenceService$$EnhancerBySpringCGLIB$$66303639という名前は、CGLIBを使用してSpringフレームワークによって実行時に動的に生成されたクラスであることを示しています。

$$と数値オフセットを使用して、このクラス名を一意にし、既存のクラスとの競合を回避します。

Stracktraceの文字列(<generated>)[〜#〜] cglib [〜#〜] によって生成されました:
CGLIBが実行時にクラスを作成するとき、ソースファイルの名前のプレースホルダーとして<generated>を使用します。スタックトレースは、実際のソースファイルと行番号の代わりにこの文字列を出力するだけです。

21
wero