/**
  * 参照整合制約を返します。
  *
  * @param propertyMeta プロパティメタデータ
  * @return 参照整合制約
  */
 protected ReferentialConstraint getReferentialConstraint(PropertyMeta propertyMeta) {
   ReferentialConstraint referentialConstraint =
       propertyMeta.getField().getAnnotation(ReferentialConstraint.class);
   return referentialConstraint != null
       ? referentialConstraint
       : AnnotationUtil.getDefaultReferentialConstraint();
 }
Esempio n. 2
0
 @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();
 }