读书人

hibernate涂鸦(3)地图pingamp;annota

发布时间: 2012-08-24 10:00:21 作者: rapoo

hibernate涂鸦(3)——mapping&annotation

org.hibernate.cfg.annotations.QueryBinder: 抽象静态帮助类

? -- public static void bindSqlResultsetMapping(SqlResultSetMapping ann, Mappings, boolean isDefault): 使用ann,mapping和isDefault建立ResultsetMappingSecondPass的一个对象,作为参数调用mapping.addSecondPass(SecondPass);

? -- public static void bindSqlResultsetMappings(SqlResultSetMappings, Mappings, boolean isDefault): 遍历@SqlResultSetMappings对每一个@SqlResultSetMapping使用ann,mapping和true(@QUESTION永远用true,isDefault根本没用上)建立ResultsetMappingSecondPass的一个对象,作为参数调用mapping.addSecondPass(SecondPass);

?

? -- public static void bindQueries(NamedQueries ann, Mappings, boolean isDefault): 遍历@NamedQueries 对每一个@NamedQuery,调用bindQuery(NamedQuery ann, Mappings, boolean)。

? -- public static void bindQuery(NamedQuery ann, Mappings, boolean isDefault): 解析JPA的EJBQL注解,使用query属性和hint属性构造NamedQueryDefinition对象,并根据isDefault参数的T/F分别调用mappings.addDefaultQuery(name属性, NamedQueryDefinition对象)或者mappings.addQuery(name属性, NamedQueryDefinition对象),期间如果name属性不存在,或者hint属性类型有错误都会抛出AnnotationException;其中hint属性可以包括JPA或者Hibernate的(@IGNORE具体属性参考方法实现)

?

? -- public static void bindQueries(NamedQueries hAnn, Mappings): 遍历@NamedQueries 对每一个@NamedQuery,调用bindQuery(NamedQuery hAnn, Mappings);

? -- public static void bindQuery(NamedQuery hAnn, Mappings mappings): : 解析Hibernate的HQL注解,使用query属性和一系列配置属性构造NamedQueryDefinition对象,并调用mappings.addQuery(name属性, NamedQueryDefinition对象),期间如果name属性不存在会抛出AnnotationException;其中配置属性固定为Hibernate的(@IGNORE具体属性参考方法实现)

?

? -- public static void bindNativeQueries(NamedNativeQueries ann, Mappings, boolean isDefault): 遍历@NamedNativeQueries对每一个@NamedNativeQuery,调用bindNativeQuery(NamedQuery ann, Mappings, boolean)。

? -- public static void bindNativeQuery(NamedNativeQuery ann, Mappings, boolean isDefault): 解析JPA的SQL注解,构造NamedSQLQueryDefinition对象,最后根据isDefault参数的T/F分别调用mappings.addDefaultSQLQuery(name属性, NamedSQLQueryDefinition对象)或者mappings.addSQLQuery(name属性, NamedSQLQueryDefinition对象),期间如果name属性不存在,或者hint属性类型有错误都会抛出AnnotationException;其中hint属性可以包括JPA或者Hibernate的,同JPA的EJBQL注解(参见bindQuery),NamedSQLQueryDefinition对象构造过程如下:

如果ann存在resultSetMapping属性,则使用该属性和query属性以及hint属性构造NamedSQLQueryDefinition对象;如果存在resultClass属性,则使用该属性的name属性值构造NativeSQLQueryRootReturn对象,并和query属性以及hint属性一起构造NamedSQLQueryDefinition对象;如果上述2者都不存在,则抛出NotYetImplementedException,该类为MappingException的子类

?

? -- public static void bindNativeQueries(NamedNativeQueries hAnn, Mappings): 遍历@NamedNativeQueries 对每一个@NamedNativeQuery,调用bindQuery(NamedNativeQuery hAnn, Mappings);

? -- public static void bindNativeQuery(NamedNativeQuery hAnn, Mappings mappings): 解析Hibernate的SQL注解,构造NamedSQLQueryDefinition对象,最后调用mappings.addSQLQuery(name属性, NamedSQLQueryDefinition对象),期间如果name属性不存在会抛出AnnotationException;其中配置属性固定为Hibernate的,同HQL注解(参见bindQuery),NamedSQLQueryDefinition对象构造过程如下:

如果ann存在resultSetMapping属性,则使用该属性和query属性以及其他一系列配置属性构造NamedSQLQueryDefinition对象;如果存在resultClass属性,则使用该属性的name属性值构造NativeSQLQueryRootReturn对象,并和query属性以及其他一系列配置属性一起构造NamedSQLQueryDefinition对象;如果上述2者都不存在,则抛出NotYetImplementedException,该类为MappingException的子类

?

?

org.hibernate.mapping.IdGenerator: 对id生成机制配置的抽象

? -- String name

? -- String identifierGeneratorStrategy: 存放实现具体IdentifierGenerator接口的id生成策略类的名字

? -- params: Properties属性集合

?

org.hibernate.id.IdentifierGenerator: 所有id生成机制的最高接口

?

org.hibernate.cfg.annotations.ResultsetMappingSecondPass: 对ResultsetMapping的抽象

? -- sqlResultSetMapping: SqlResultSetMapping类型的annotation对象

? -- mappings:

? -- boolean isDefault

?

org.hibernate.cfg.VerifyFetchProfileReferenceSecondPass: 对FetchProfile的抽象

? -- String fetchProfileName

? -- fetch: FetchProfile.FetchOverride类型的annotation对象

? -- mappings

?

org.hibernate.engine.NamedQueryDefinition: 对对象查询语句的抽象

? -- String query: 语句本身
? -- boolean cacheable: 是否缓存
? -- String cacheRegion: 缓存在哪里
? -- Integer timeout: 貌似是JPA唯一支持的属性
? -- Integer fetchSize
? -- flushMode
? -- parameterTypes: Map<?>
? -- cacheMode
? -- boolean readOnly
? -- String comment

?

org.hibernate.engine.NamedSQLQueryDefinition extends NamedQueryDefinition: 对SQL查询语句的抽象,重用了对象查询语句的所有属性

? -- queryReturns: NativeSQLQueryReturn对象的数组,指定返回结果为一组实体对象,和resultSetRef 互斥

? -- String resultSetRef: 指定返回结果为一个resultSet的mapping,和queryReturns互斥

? -- List<String> querySpaces:
? -- boolean callable

?

org.hibernate.engine.query.sql.NativeSQLQueryRootReturn extends NativeSQLQueryNonScalarReturn: 对sql返回的实体对象类型的抽象

? -- String returnEntityName

? -- int hashCode: 根据returnEentityName生成的hash code

? -- String alias

? -- lockMode

? -- propertyResults: Map<?>

?

org.hibernate.engine.FilterDefinition: 对查询过滤器的抽象

? -- String filterName

? -- String defaultFilterCondition

? -- Map parameterTypes:? 参数名字和类型的Map

?

org.hibernate.mapping.TypeDef: 对类型定义的抽象

? -- String typeClass
? -- Properties parameters

?

?

读书人网 >软件架构设计

热点推荐