gpt4 book ai didi

java - JPA插入外键为空

转载 作者:行者123 更新时间:2023-12-02 00:27:13 24 4
gpt4 key购买 nike

嗯,我已经尝试了网上能找到的所有方法,但仍然没有成功。

我有两个类。趋势图表和趋势。这是一对多映射。 TrendsChart 可以有多个趋势。

数据库:SQL Server

趋势图表

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

趋势图表模型

@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<>();

趋势模型

@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 列始终为空

最佳答案

您必须主动设置 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/

关于java - JPA插入外键为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58044640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com