所以我有下面这样的课程,试图实现多人关系
@Entity(name="request_city_id")
@Table(uniqueConstraints={@UniqueConstraints{columnNames={"request_id","cityId"})})
@Data
@NoArgsConstructor
@FieldDefault(level=AccessLevel.PRIVATE)
public class RequestCityId{
@GenratedValue(strategy=SEQUENCE, generator="seq_req_city_id")
@SequenceGenerator(name="seq_req_city_id", allocationSize=1)
@Column(name="rc_id")
@Id
long id;
//some other many to one joins
@ManyToOne
@JoinColumn(name="request_id")
Request request;
String cityId;
String status;
RequestCityId(Request req){
request= req;}
}
现有表:
@Entity(name="request")
@Data
@NoArgsConstructor
@FieldDefault(level=AccessLevel.PRIVATE)
public class Request{
String frequency
@GenratedValue(strategy=SEQUENCE, generator="seq_req_d")
@SequenceGenerator(name="seq_req_id", allocationSize=1)
@Column(name="request_id")
@Id
long id;
@OneToMany(cascade={ PERSIST, MERGE}, mappedBy="request", fetch=EAGER)
Set<RequestCityId> requestCityIds;
}
以下是serviceClass:
RequestRepository reqRepo; // this class extends crudRespository
public RequestDto merge(RequestDto request){
Request req= mapper.requestDtoToRequest(request);
Request enhancedObject = enhanceReq( req);
Request savedObject = reqRepo.save(enahncedObject);
return mapper.requestToRequestDto(savedObject)
}
private Request enhanceReq(Request req){
Set<RequestCityId> requestCityIds= req.getRequestCityIds();
requestCityIds.foreach(e-> e.setRequest(req));
return req;
}
但是当我运行我的代码时,它试图多次插入,因为我遇到了约束冲突,我应该怎么做才能解决这个问题?
这是因为您正在将普通的非托管POJO附加到requestCityID
,然后尝试持久化(插入),因为这些是托管实体,这意味着您不必显式调用save
来实际更新实体。
为了避免这种情况,首先使用
Request savedObject=reqRepo。保存(enahncedObject)
然后在您的方法中使用该
savedObject
-它现在是一个托管代理
private Request enhanceReq(Request saved){
Set<RequestCityId> requestCityIds= req.getRequestCityIds();
requestCityIds.foreach(e-> e.setRequest(saved));
return req;
}
那么应该可以了。很明显,您必须在调用顺序等方面周旋,但是多个插入的主要问题将会消失。
我正在开发一个spring批处理应用程序(内存为2GB),尝试处理数据(在处理过程中使用select查询获取数据),并在postgres DB中插入大约100万条处理过的记录。我在这个项目中使用Spring Data JPA。但是Spring JPA在处理这些记录时消耗了太多内存
问题内容: 我有一个类似于以下内容的插入语句: 我需要使用多个ID插入同一条语句。现在我有: 我只是必须运行此程序,还是有一个更精简的版本? 问题答案: 使用:
问题内容: 我有一个列的表,让我们把它称为是目前该表中的所有行。我想将所有行的值插入该列。有人可以给我这个SQL吗? 我已经尝试过了,但这仅填充了最后一行。如何一次完成所有行? 问题答案: 您正在寻找UPDATE not insert。 UPDATE将更改现有行的值(并且可以包含WHERE以使其仅影响特定行),而INSERT将添加新行(这使其看起来仅更改了最后一行,但实际上是添加了新行)具有该值的
问题内容: 我正在尝试使用Linq / EntityFramework将数据从C#应用程序保存到数据库中。插入到一个表很简单,但是我不确定如何将数据插入到三个都与自动增量标识互连的表中?这是一个小问题,所以我使用一个线程及其所有帖子- 每个 ThreadTitle 和每个 Post 都与一个 User (不是实际的表名)相关联。 我的设计思想是将完整线程刮入内存,然后进行“批量”插入。为了减少负载
问题内容: 我有这种形式的字符串 字符串中的所有%s都具有相同的值(即s)。有没有更好的方式编写此代码?(而不是列出三遍) 问题答案: 您可以使用Python 2.6和Python 3.x中提供的高级字符串格式:
问题内容: 遵循Android标签的任何人都可能对我很熟悉。我很难为我的高分实现SQLite数据库。这也是我第一次使用SQLite。 我正在尝试仅插入两个变量-int和long。我的方法无法正常工作。除了上面讨论的内容外,任何其他建议也应受到赞赏。 预先感谢您的帮助。 Highscores.java DatabaseHelper.java LogCat输出 问题答案: 在这行上,打开数据库: 这会