[英]JPA inserting foreign key as null
好吧,我已經嘗試了所有可以在網上找到的東西,但仍然沒有運氣。
我有2節課。 趨勢圖表和趨勢。 這是 OneToManyMapping。 TrendsChart 可以有多個趨勢。
數據庫:SQL 服務器
趨勢圖表
CREATE TABLE [dbo].[TrendsChart](
[id] [int] NOT NULL IDENTITY,
[Name] [varchar] (50) NULL,
PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
趨勢表
CREATE TABLE [dbo].[Trends](
[TrendsID] [int] NOT NULL IDENTITY,
[ItemName] [varchar] (100) NULL,
[chart_id] [int] NULL
PRIMARY KEY CLUSTERED
(
[TrendsID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Trends] WITH CHECK ADD CONSTRAINT [FK_Trends_TrendsChart] FOREIGN KEY([chart_id])
REFERENCES [dbo].[TrendsChart] ([id]) ON DELETE CASCADE
GO
ALTER TABLE [dbo].[Trends] CHECK CONSTRAINT [FK_Trends_TrendsChart]
GO
趨勢圖 Model
@Entity
@Table(name = "TrendsChart")
public class TrendsChart {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
@Column(name="Name")
private String name;
@OneToMany(mappedBy="trendsChart", cascade = CascadeType.ALL)
List<Trends> trends = new ArrayList<>();
趨勢 Model
@Entity
@Table(name = "Trends")
public class Trends {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="TrendsID")
private int trendsID;
@Column(name="ItemName")
private String itemName;
@ManyToOne(fetch = FetchType.EAGER, optional = false)
@JoinColumn(name ="chart_id", nullable=false, updatable = false, insertable = true,referencedColumnName = "id")
@OnDelete(action = OnDeleteAction.CASCADE)
private TrendsChart trendsChart;
在 controller 我正在做
trendsChartRepository.save(trendsChart);
除了chart_id列始終為 null 之外,所有數據均已正確填充
您必須為 TrandChart 積極設置每個趨勢:
@Entity
@Table(name = "TrendsChart")
public class TrendsChart {
//...
public void addTrend(Trends trend) {
this.trends.add(trend);
trend.setTrendsChart(this);
}
}
然后保存:
TrendsChart trendsChart = new TrendsChart();
Trends trend = new Trend();
trendsChart.setTrend(trend);
trendsChartRepository.save(trendsChart);
這是關於這個主題的一個很好的教程: https://vladmihalcea.com/the-best-way-to-map-a-onetomany-association-with-jpa-and-hibernate/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.