0

私は春の休止状態アプリケーションに取り組んでおり、非 ID 多対 1 関係ベースの列を使用してテーブルから削除しようとしています。エンティティ クラスは次のとおりです。

@Entity  
public class Day {  
@id(name = "DAY_ID")  
dayId;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "DAY_ID")
List<Holiday> holidayList;  
...  
}

@Entity  
public class Holiday {  
@id(name="HOLIDAY_ID")
holidayId;  
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "DAY_ID")
Day day;
...
}

hql を使用して休日テーブルから行を削除しようとしています。

String query = "DELETE FROM Holiday WHERE day.dayId = " + dayObject.getdayId();
Query holidayDeleteQuery = getSession().createQuery(query);
holidayDeleteQuery.executeUpdate();

コンソールで適切な削除クエリを取得していますが、DB をチェックすると、行がまだ存在することがわかりましたが、現在、休日テーブルの DAY_ID 列は null です。なぜこれが起こっているのか理解できませんか?
編集:助けて!!! 私の主な問題は、DAY_ID 列が null 値に変更される理由です??

4

2 に答える 2

0

これがあなたの問題かどうかはわかりませんが、クエリで「DELETE FROM Holidays ...」と言いますが、クラス名はHolidayです。HQL では、テーブル名などではなく、クラス名を使用する必要があります。これはあなたのコードのタイプミスですか、それともここだけですか?

実際、さらに調べてみると、さらにいくつかの問題があります。これは私がそれを書く方法です:

String query = "DELETE FROM Holiday h WHERE h.day = :day";
Query holidayDeleteQuery = getSession().createQuery(query);
query.setParameter("day", dayObject);
holidayDeleteQuery.executeUpdate();

分解するには、クラス名「Holiday」を使用し、エイリアス「h」を割り当ててから、Holiday オブジェクトの day フィールド (「h.day」) を参照し、実際の Day オブジェクトと比較します。

于 2011-10-12T10:07:59.867 に答える
0

ONDELETE 外部キー制約は何ですか? アプリケーションの他の部分が行を挿入している可能性はありますか?

于 2011-10-13T08:18:48.257 に答える