を作成するときに、私は彼らのコンストラクタ/ゲッター/セッターを持つもの永続エンティティを持っている:JPAマッピング例外子要素
@Entity
public class Budget {
@Id
@GeneratedValue
private Long budgetId;
private double totalAmount;
private BudgetStatus status;
private Instant created;
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "budgetLineId")
private List<BudgetLine> budgetLines = new ArrayList<>();
// constructors/getters/setters
}
私はこのエンティティとの多くの関係に一方向のいずれかを実行します:
@Entity
@Immutable
public class BudgetLine {
@Id
@GeneratedValue
private Long budgetLineId;
private String description;
private int tooth;
// constructors/getters/setters
}
私は私が正しくエンティティを注釈を付けていると思うが、私はこの例外を取得しています:
はカイを追加または更新することはできませんLD行:外部キー制約が 失敗するこれで
( '歯科医アプリを' 'budgetline'、制約 'FKn3er98a66as3vxuj1kij2q040' FOREIGN KEY( 'budgetLineId')REFERENCES [予算]( 'budgetId')。)コード:
private List<Budget> createBudgets(Patient patient, BudgetStatus budgetStatus) {
List<Budget> budgets = new ArrayList<Budget>();
Treatment treatment = new Treatment("Implant");
treatmentRepository.save(treatment);
for (int i = 0; i < 5; i++) {
List<BudgetLine> budgetLines = new ArrayList<>();
BudgetLine budgetLine = budgetLineRepository.save(new BudgetLine("tooth", 120));
budgetLines.add(budgetLine);
Budget budget = budgetRepository
.save(new Budget(10, 10, 300, "Comments", budgetStatus, patient, treatment, budgetLines));
budgets.add(budget);
}
patient.setBudgets(budgets);
patientRepository.save(patient);
return budgets;
}
私はBudgetLine
インスタンスを永続していたときに、それは一方向の関係だとしてBudgetLine
表はBudget
で外部キー制約を持つべきではありませんので、私は、この例外を得ている理由を私は理解していません。何が起こっているのか?ありがとう。
こんにちは、お返事ありがとうございます。あなたは正しいです、私は別の方法で '@ JoinColumn'を理解しましたが、私は' BudgetLine'に 'private Long budgetId'を追加しようとしましたが、それは働いていません... –
あなたはそれをする必要はありません。あなたが必要とするJavaコードのThgeのみの変更は私の答えです。 SQLを使用してテーブルを作成し、それをHibernateで作成しない場合は、BudgetLineテーブルにbudgetIdカラムを追加し、BudgetLine.budgetdとBudget.budgetIdの間に外部キー制約を作成する必要があります。 –
はい、申し訳ありませんが、JavaクラスからHibernateを使用してテーブルを自動生成するため、プロパティを作成しました。あなたのアノテーションに 'referencedColumnName =" budgetId "'を追加しました。それはうまく動作していないと完璧に動作しています... –