All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nablarch.common.dao.ColumnMeta Maven / Gradle / Ivy

The newest version!
package nablarch.common.dao;

import jakarta.persistence.GenerationType;

import nablarch.core.util.annotation.Published;

/**
 * カラムの定義情報を保持するクラス。
 *
 * @author kawaisma
 * @author Hisaaki Shioiri
 */
@Published(tag = "architect")
public class ColumnMeta {

    /** エンティティメタ情報 */
    private final EntityMeta entityMeta;

    /** アノテーションの設定 */
    private final JpaAnnotationParam jpaAnnotationParam;

    /**
     * コンストラクタ。
     * @param entityMeta エンティティ定義のメタデータ
     * @param jpaAnnotationParam プロパティ情報
     */
    public ColumnMeta(final EntityMeta entityMeta, final JpaAnnotationParam jpaAnnotationParam) {
        this.entityMeta = entityMeta;
        this.jpaAnnotationParam = jpaAnnotationParam;
    }

    /**
     * データベースのカラム名を取得する。
     *
     * @return カラム名
     */
    public String getName() {
        return jpaAnnotationParam.getColumnName();
    }

    /**
     * Entityクラスのプロパティ名を取得する。
     *
     * @return プロパティ名
     */
    public String getPropertyName() {
        return jpaAnnotationParam.getName();
    }

    /**
     * JDBCでSQLにバインドするときの型を取得する。
     *
     * @return JDBCでバインドするときの型
     */
    public Class getJdbcType() {
        return jpaAnnotationParam.getJdbcType();
    }

    /**
     * Entityクラスのプロパティ型を取得する。
     *
     * @return プロパティの型
     */
    public Class getPropertyType() {
        return jpaAnnotationParam.getPropertyType();
    }

    /**
     * プロパティが揮発性なものかどうかを取得する。
     *
     * @return 揮発性ならばtrue
     */
    protected boolean isTransient() {
        return jpaAnnotationParam.isTransient();
    }

    /**
     * カラムがプライマリーキーを構成するかどうかを取得する。
     *
     * @return プライマリーキーを構成すればtrue
     */
    public boolean isIdColumn() {
        return jpaAnnotationParam.isIdColumn();
    }

    /**
     * カラムが楽観排他用のバージョンを表すかどうかを取得する。
     *
     * @return バージョンを表せばtrue
     */
    public boolean isVersion() {
        return jpaAnnotationParam.isVersionColumn();
    }

    /**
     * 自動生成カラムか否か。
     *
     * @return 生成タイプがnullでないならばtrue
     */
    public boolean isGeneratedValue() {
        return jpaAnnotationParam.getGenerationType() != null;
    }

    /**
     * IDジェネレータのタイプを取得する。
     *
     * @return IDジェネレータのタイプ
     */
    public GenerationType getGenerationType() {
        return jpaAnnotationParam.getGenerationType();
    }

    /**
     * IDジェネレータの名前を取得する。
     *
     * @return IDジェネレータの名前 (シーケンスならシーケンス名 / 発番テーブルなら発番テーブルのキー名)
     */
    public String getGeneratorName() {
        return jpaAnnotationParam.getGeneratorName();
    }

    @Override
    public boolean equals(final Object another) {
        if (another == null || !(another instanceof ColumnMeta)) {
            return false;
        }
        final ColumnMeta anotherMeta = ColumnMeta.class.cast(another);
        return this.jpaAnnotationParam.getColumnName().equals(anotherMeta.getName())
                && entityMeta.equals(anotherMeta.entityMeta);
    }

    @Override
    public int hashCode() {
        return this.jpaAnnotationParam.getColumnName().hashCode() + entityMeta.hashCode();
    }

}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy