/** * 参照整合制約を返します。 * * @param propertyMeta プロパティメタデータ * @return 参照整合制約 */ protected ReferentialConstraint getReferentialConstraint(PropertyMeta propertyMeta) { ReferentialConstraint referentialConstraint = propertyMeta.getField().getAnnotation(ReferentialConstraint.class); return referentialConstraint != null ? referentialConstraint : AnnotationUtil.getDefaultReferentialConstraint(); }
@Override protected void prepareParams(final T entity) { for (final PropertyMeta propertyMeta : targetProperties) { final Object value = FieldUtil.get(propertyMeta.getField(), entity); addParam(value, propertyMeta); } for (final PropertyMeta propertyMeta : entityMeta.getIdPropertyMetaList()) { final Object value = FieldUtil.get(propertyMeta.getField(), entity); addParam(value, propertyMeta); } if (!includeVersion && entityMeta.hasVersionPropertyMeta()) { final PropertyMeta propertyMeta = entityMeta.getVersionPropertyMeta(); final Object value = FieldUtil.get(propertyMeta.getField(), entity); addParam(value, propertyMeta); } }
/** * {@link GenerationType#TABLE}方式で識別子の値を自動生成するIDジェネレータを処理します。 * * @param propertyMeta プロパティメタデータ * @param generatedValue 識別子に付けられた{@link GeneratedValue}アノテーション * @param entityMeta エンティティのメタデータ * @return {@link GenerationType#TABLE}方式で識別子の値を自動生成するIDジェネレータが存在した場合に <code>true</code> */ protected boolean doTableIdGenerator( PropertyMeta propertyMeta, GeneratedValue generatedValue, EntityMeta entityMeta) { String name = generatedValue.generator(); TableGenerator tableGenerator; if (StringUtil.isEmpty(name)) { tableGenerator = DEFAULT_TABLE_GENERATOR; } else { tableGenerator = propertyMeta.getField().getAnnotation(TableGenerator.class); if (tableGenerator == null || !name.equals(tableGenerator.name())) { tableGenerator = entityMeta.getEntityClass().getAnnotation(TableGenerator.class); if (tableGenerator == null || !name.equals(tableGenerator.name())) { return false; } } } propertyMeta.setTableIdGenerator( new TableIdGenerator(entityMeta, propertyMeta, tableGenerator)); return true; }
/** * {@link GenerationType#SEQUENCE}方式で識別子の値を自動生成するIDジェネレータを処理します。 * * @param propertyMeta プロパティメタデータ * @param generatedValue 識別子に付けられた{@link GeneratedValue}アノテーション * @param entityMeta エンティティのメタデータ * @return {@link GenerationType#SEQUENCE}方式で識別子の値を自動生成するIDジェネレータが存在した場合に <code>true</code> */ protected boolean doSequenceIdGenerator( PropertyMeta propertyMeta, GeneratedValue generatedValue, EntityMeta entityMeta) { String name = generatedValue.generator(); SequenceGenerator sequenceGenerator; if (StringUtil.isEmpty(name)) { sequenceGenerator = DEFAULT_SEQUENCE_GENERATOR; } else { sequenceGenerator = propertyMeta.getField().getAnnotation(SequenceGenerator.class); if (sequenceGenerator == null || !name.equals(sequenceGenerator.name())) { sequenceGenerator = entityMeta.getEntityClass().getAnnotation(SequenceGenerator.class); if (sequenceGenerator == null || !name.equals(sequenceGenerator.name())) { return false; } } } propertyMeta.setSequenceIdGenerator( new SequenceIdGenerator(entityMeta, propertyMeta, sequenceGenerator)); return true; }
/** * テーブルジェネレータを返します。 * * @param entityMeta エンティティメタデータ * @param propertyMeta プロパティメタデータ * @return テーブルジェネレータ */ protected TableGenerator getTableGenerator(EntityMeta entityMeta, PropertyMeta propertyMeta) { Field field = propertyMeta.getField(); GeneratedValue generatedValue = field.getAnnotation(GeneratedValue.class); if (generatedValue == null) { throw new IllegalStateException("@GeneratedValue not found."); } String name = generatedValue.generator(); if (StringUtil.isEmpty(name)) { return AnnotationUtil.getDefaultTableGenerator(); } TableGenerator tableGenerator = field.getAnnotation(TableGenerator.class); if (tableGenerator != null && name.equals(tableGenerator.name())) { return tableGenerator; } tableGenerator = entityMeta.getEntityClass().getAnnotation(TableGenerator.class); if (tableGenerator != null && name.equals(tableGenerator.name())) { return tableGenerator; } throw new IllegalStateException("@TableGenerator not found."); }
public ForeignKeyDesc getForeignKeyDesc(EntityMeta entityMeta, PropertyMeta propertyMeta) { if (!propertyMeta.isRelationship() || propertyMeta.getMappedBy() != null) { return null; } ReferentialConstraint referentialConstraint = propertyMeta.getField().getAnnotation(ReferentialConstraint.class); if (referentialConstraint == null) { if (!regardRelationshipAsFk) { return null; } } else { if (!referentialConstraint.enable()) { return null; } } ForeignKeyDesc foreignKeyDesc = new ForeignKeyDesc(); doColumn(entityMeta, propertyMeta, foreignKeyDesc); doTable(entityMeta, propertyMeta, foreignKeyDesc); doReferetialAction(entityMeta, propertyMeta, foreignKeyDesc); return foreignKeyDesc; }
/** * カラムを返します。 * * @param propertyMeta プロパティメタデータ * @return カラム */ protected Column getColumn(PropertyMeta propertyMeta) { Field field = propertyMeta.getField(); Column column = field.getAnnotation(Column.class); return column != null ? column : AnnotationUtil.getDefaultColumn(); }