こんにちは、Hibernate での多対多のマッピングに問題があります。
上記のテーブルは、多対多のマッピングで接続されています。テーブル tbl_cp_group_relation は、n:m 接続を持つテーブルです。
私のエンティティでは、この問題をいくつかの方法で解決しました。多対多マッピングと多対一マッピングを使用しました。どちらの方法でも、部分的に機能しました。充電ポイントのグループを取得し、グループの充電ポイントを取得しました。しかし、充電ポイントをグループに追加したり、グループを充電ポイントに追加したりすることはできませんでした。充電ポイントをグループに追加すると、プログラムが実行され、機能を終了するまで、グループ内に充電ポイントが増えます。充電ポイントにグループを追加しようとすると、常に重複キー エラー メッセージが表示されます。
ここに私のグループエンティティがあります。
@Entity
@Table(name = "tbl_cp_group")
public class CpGroupEntity {
...
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "tbl_cp_group_relation", joinColumns = { @JoinColumn(name = "cp_group_id") }, inverseJoinColumns = { @JoinColumn(name = "cp_id") })
private List<ChargingPointEntity> cps = new ArrayList<ChargingPointEntity>();
...
}
ここに私の充電ポイントエンティティがあります。
@Entity
@Table(name = "tbl_charging_point")
public class ChargingPointEntity {
...
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "tbl_cp_group_relation", joinColumns = { @JoinColumn(name = "cp_id") }, inverseJoinColumns = { @JoinColumn(name = "cp_group_id") })
private List<CpGroupEntity> groups = new ArrayList<CpGroupEntity>();
...
}
ここに私の関数のコード
@Transactional
public void administrateGroupCP(GroupDiff diff, long groupId, String username) throws BadInputRoutingException, NoSuchGroupException,
NotAuthorizedException, NoSuchChargingPointException {
try {
// Create add list
List<Long> addList = diff.getAdd();
// Get entities from database
CpGroupEntity groupEntity = cpGroupDAO.getGroup(groupId);
UserEntity userEntity = userDAO.getUser(username);
// Add charging points
addChargingPoints(addList, groupEntity, userEntity);
// Remove charging points
// removeChargingPoints(removeList, groupEntity, userEntity);
} catch (EntityNotFoundException e) {
throw new NoSuchGroupException();
}
}
@Transactional
private void addChargingPoints(List<Long> addList, CpGroupEntity groupEntity, UserEntity userEntity) throws NoSuchChargingPointException,
BadInputRoutingException {
...
// Add charging points to group
// 1. Clear list of charging points. Remove charging points which are to ignore from the charging point list with the add items
addEntitiesList.removeAll(ignore);
if (0 < addEntitiesList.size()) {
// 2. Add charging points to charging point list of entity
groupEntity.getCps().addAll(addEntitiesList);
// 3. Save changes
cpGroupDAO.updateChargingPoints(groupEntity);
}
}
}
ここで cpGroupDAO の機能
public void updateChargingPoints(CpGroupEntity group) {
entityManager.merge(group);
entityManager.flush();
}
エラーがどこにあるのかわかりません。しかし、私が実体を手に入れたとき、それは間違っていることはできません。グループまたは充電ポイントのリストからエントリを削除または追加することしかできません。
誰かが私を助けてくれることを願っています。