2012-02-28 8 views
4

にネストされたオブジェクトを削除し、私はクラスにこれらを持っている:自動ORMLite

public class Station { 
    @DatabaseField(foreign = true, foreignAutoCreate = true) 
    private OpeningTimes openingTimes; 
} 

public class OpeningTimes { 
    @DatabaseField(generatedId = true) 
    int _id; 
} 

今OpeningTimes行が自動作成され、私はStationDao上createOrUpdateメソッドを呼び出すとき。それは素晴らしいことです!

StationオブジェクトとそのネストされたオブジェクトOpeningTimesを自動的に削除できたら、私も感謝します。

私はStationクラスでこのようにする必要があり、かなり混乱しているようです。それ以上のエレガントな方法はありますか?

public void deleteFromDb(DatabaseHelper dbHelper) { 
    try { 
     openingTimes.deleteFromDb(dbHelper); 
     dbHelper.getStationDao().delete(this); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

EDIT: また、私はこれをしようとしているが、

@DatabaseField(foreign = true, foreignAutoCreate = true, columnDefinition="INTEGER, FOREIGN KEY(`openingTimes_id`) REFERENCES openingtimes(`_id`)") 

答えて

8

SQL文のエラーで私は、DAOのレベルではなく、永続オブジェクトレベルでこれをやって検討します。私がお勧めするのは、独自のStationDaoインターフェイスと独自のStationDaoImpl実装を作成することです。 ORMLite文書example of this

public interface StationDao extends Dao<Station, Integer> { 
    // we will just be overriding some of the delete methods 
} 

はその後delete()メソッドをオーバーライドして、子オブジェクトを削除しますあなたの実装を作成します。以下のような何か:

public class StationDaoImpl extends BaseDaoImpl<Station, Integer> 
    implements StationDao { 
    private final Dao<OpeningTimes, Integer> openTimesDao; 
    public AccountDaoImpl(ConnectionSource connectionSource) throws SQLException { 
     super(connectionSource, Station.class); 
     openTimesDao = DaoManager.createDao(connectionSource, OpeningTimes.class); 
    } 

    @Override 
    public int delete(Station station) throws SQLException { 
     if (station.openTimes != null) { 
      openTimesDao.delete(station.openTimes); 
     } 
     return super.delete(station); 
    } 
} 

あなたがあなた自身のDAOを使用している場合、あなたはそれが@DatabaseTable(daoClass = StationDaoImpl.class)を使用して構成されていることを確認する必要があります。

+2

これは 'PreparedDelete'でも動作しますか?なぜなら私は 'DELETE ID NOT IN'を使ってリモートDBと完全な同期をしたいからです。 – dzeikei