如何解决sql使用spring jpa更新一对多外键为null
我正在使用 spring boot , java 11 和 jpa 。
我有2个表,entry和entry_names。我想在第二个表(entry_names)中更新一个条目及其随后的多对一关系。
问题: Entry_id字段始终为null,因此它将在Entry_names中创建新条目,而不是对其进行更新。我究竟做错了什么?这是我最新的代码:
表格:
+-------+
| Entry |
+-------+
| id | pk:id
| title |
| text |
+-------+
+-----------+
|entry_names|
+-----------+
| id | pk: id
| name | fk: entry_id -> entry(id)
| entry_id |
+-----------+
这些是实体:
条目:
@Entity
@Table(name="entry")
@Getter
@Setter
public class Entry {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String text;
@OneToMany(
fetch = FetchType.EAGER,mappedBy = "entry",cascade = CascadeType.ALL,orphanRemoval = true)
private Set<EntryNames> names;
}
条目名称:
@Entity
@Table(name="entry_names")
@Getter
@Setter
public class EntryNames {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "entry_id")
private Entry entry;
@Column(name = "name")
private String name;
}
代码:
@Override
@Transactional
public boolean update(EntryDto dto) {
try {
Optional<Entry> findEntry = dao.findById(entry.getId());
if (findEntry.isPresent()) {
Entry entry = findEntry.get();
Set<EntryNames> entryNames = new HashSet<>();
entry.getName().forEach(entryNames -> entryNames.add(new EntryName(entryName)));
entryNames.forEach(entryName -> entryName.setId(entry.getId()));
entry.setName(entryNames);
dao.save(entry);
return true;
}
return false;
} catch (Exception exception) {
logger.error("ERROR: {}",exception.getMessage());
return false;
}
}
(已编辑以删除作业,仍然是同样的问题)
解决方法
您正在使用新的HashSet ()设置名称;将会覆盖这些值。
更改为:
private Set<EntryNames> names ;
Aslo在更新方法中添加它
entrynames.setEntry(entry)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。