Beanが引き継いだらどうなるの?


public class Base {
    public long getBase_item() {
        return base_item;
    }

    public void setBase_item(long base_item) {
        this.base_item = base_item;
    }

    private long base_item;
}
public class Test extends Base {
    public long getIn_test() {
        return in_test;
    }

    public void setIn_test(long in_test) {
        this.in_test = in_test;
    }

    private long in_test;
}
public class Go {
    public static void main(String[] arg) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
        Test t = new Test();

        Map<String,Object> props =BeanUtils.describe(t);

        System.out.println(props);

        for (Map.Entry<String, Object> entry : props.entrySet()) {
            String key = entry.getKey();
            System.out.println(key);
        }

    }
}
{base_item=0, in_test=0, class=class net.duguying.community.bean.Test}
base_item
in_test
class

Process finished with exit code 0

Pojo
private long _InsertObject(POJO obj) {
        Map<String, Object> pojo_bean = obj.ListInsertableFields();
        String[] fields = pojo_bean.keySet().toArray(
                new String[pojo_bean.size()]);
        StringBuilder sql = new StringBuilder("INSERT INTO ");
        sql.append(obj.TableName());
        sql.append("(`");
        for (int i = 0; i < fields.length; i++) {
            if (i > 0)
                sql.append("`,`");
            sql.append(fields[i]);
        }
        sql.append("`) VALUES(");
        for (int i = 0; i < fields.length; i++) {
            if (i > 0)
                sql.append(',');
            sql.append('?');
        }
        sql.append(')');
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            ps = QueryHelper.getConnection().prepareStatement(sql.toString(),
                    PreparedStatement.RETURN_GENERATED_KEYS);
            for (int i = 0; i < fields.length; i++) {
                ps.setObject(i + 1, pojo_bean.get(fields[i]));
            }
            ps.executeUpdate();
            if (getId() > 0)
                return getId();

            rs = ps.getGeneratedKeys();
            return rs.next() ? rs.getLong(1) : -1;
        } catch (SQLException e) {
            throw new DBException(e);
        } finally {
            DbUtils.closeQuietly(rs);
            DbUtils.closeQuietly(ps);
            sql = null;
            fields = null;
            pojo_bean = null;
        }
    }

Test beanはBase beanを継承し、最後にTestフィールドにBaseが含まれているフィールドを取得し、PojoのSaveメソッド、doUpdateメソッドはこのようにフィールドを自動的に取得してinsertおよびupdate文を生成する.Project beanとReward beanの違いは大きく、RewardがProjectを継承するのはまったくおかしい.Project独自のフィールドが山積みになり、PojoのSave/doUpdateなどの方法がすべて廃棄され、beanもbeanの意味を失うため、RewardがProjectを継承するのはまったくおかしい.
RewardはBaseを継承し、ProjectはBaseを継承します.Baseテーブル抽出共通フィールドを作成します.RewardテーブルとProjectテーブルのstatusフィールドのストリームは、名前が同じ値で意味が大きく異なります.そのため、Baseテーブルでデータの意味が一致するように、setStatusメソッドをRewardテーブルとProjectテーブルに書き換える必要があります.Baseテーブルの初志も失い、RewardとProjectの両方のエンティティクラスを同時に変更することになります.無理に実行できます.変更が大きく、後でBaseクラスに新しい属性を追加することはできません.Baseクラスを継承するエンティティに対応するテーブルにもbaseエンティティに含まれるフィールドが含まれている必要があります.そうしないと、Save/doUpdateも虚構になります.
したがって,エンティティクラス間の相互継承は単純に単純である.
個人的には、共通のフィールドをProjectテーブルに格納しても、共通のフィールドを新しいテーブルBaseに格納しても、「継承」という概念にかかわることはなく、ProjectとRewardテーブルを削除する際に、共通のフィールドをベーステーブルに同期して削除するのが正しいと思います.エンティティクラスはfinalとして定義する必要があります.