我有一个用控制器、服务和存储库逻辑构建的客户实体。
我还有一个Address实体,只有一个简单的POJO和@OneTomany注释。
如果我用相同的地址属性发出两个POST请求--如果这些地址属性已经存在于数据库中,我如何告诉我的应用程序--阻止在数据库中添加新实体,而是返回已经存在的实体?
例如。员额请求:
// First request
{
"name": "Foo",
"contact": "123456",
"email": "Foo@gmail.com",
"address": {
"street": "Wall street",
"postalCode": 10,
"houseNo": "45",
"city": "New York"
}
}
// Second request
{
"name": "Bar",
"contact": "5321",
"email": "Bar@gmail.com",
"address": {
"street": "Wall street", <----- same as first request
"postalCode": 10, <----- same as first request
"houseNo": "45", <----- same as first request
"city": "New York" <----- same as first request
}
}
这是获取所有客户时的结果:
[
{
"id": 1,
"name": "Foo",
"contact": "123456",
"email": "Foo@gmail.com",
"address": {
"id": 1,
"street": "Wall street",
"postalCode": 10,
"houseNo": "45",
"city": "New York"
}
},
{
"id": 2,
"name": "Bar",
"contact": "5321",
"email": "Bar@gmail.com",
"address": {
"id": 2, <---------------- expect this ID to be 1
"street": "Wall street",
"postalCode": 10,
"houseNo": "45",
"city": "New York"
}
}
]
这里是必要的信息(if)需要帮助我进行我的小项目。
customer.java
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
@Entity
@Table
public class Customer {
@Id
@SequenceGenerator(
name = "customer_sequence",
sequenceName = "customer_sequence",
allocationSize = 1
)
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "customer_sequence"
)
private Long id;
private String name;
private String contact;
private String email;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "address_id", nullable = false)
private Address address;
[...]
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id")
@Entity
@Table
public class Address {
@Id
@SequenceGenerator(
name = "address_sequence",
sequenceName = "address_sequence",
allocationSize = 1
)
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "address_sequence"
)
private Long id;
private String street;
private int postalCode;
private String houseNo;
private String city;
@JsonIgnore
@OneToMany(mappedBy = "address")
private Set<Customer> customers;
[...]
//...
@PostMapping
public void createCustomer(@RequestBody Customer customer) {
customerService.createCustomer(customer);
}
[...]
和将客户保存到数据库的服务:
//...
public void createCustomer(Customer customer) {
customerRepository.save(customer);
}
[...]
您可以用您的地址参数创建一个散列,并保持类似;
"street": "Wall street",
"postalCode": 10,
"houseNo": "45",
"city": "New York"
"uid": "3rn3u924917vt8r78b17vxver"
当您获得一个新地址时,可以用它创建一个散列,并用该散列获得地址。如果该散列中存在任何地址,则获取该地址并将其放入customer对象中并保存。
我在代码优先的情况下使用EF,我有这样的模型: 我收到一个客户ID和一个产品ID列表。当产品在数据库中不存在时,我想添加它: 问题是EF试图级联更改并尝试插入一个新的对象,其ID与现有对象相同,因此失败。我如何解决这个问题? 这是插入方法:
问题内容: 我很沮丧,我不知道该怎么做。 基本上,我只想创建一个表,但是如果它存在,则需要将其删除并重新创建,而不是将其截断,但是如果不存在,则可以创建它。 有人可以帮忙吗? 谢谢乔治 问题答案: 放在tablename您的发言之前。 该语句将删除该表(如果存在),但如果不存在则不会引发错误。
我有两个程序。第一个分配共享内存文件,第二个从中读取。。我使用placement new将对象放置到此内存中,以确保对象不会使用新的或分配共享内存文件之外的任何内存。 我的阵列结构: 方案1: 方案2: > 程序一将SHMArray放置在内存中,位置为new。程序二在程序一已经放置的对象上做同样的事情(覆盖它)。这是未定义的行为吗?我认为不是,但我想确认一下。 两个程序都不调用析构函数数组- 我基
我试图将每个列表都位于嵌套对象内的webservice模型映射到更简单的对象。 模型1 映射非常简单: 映射工作正常,除了一个问题。当我将带有null子级的父母映射到父母2并返回父母时,儿童对象是用空列表创建的。有什么方法可以防止这种情况吗?
你知道吗?也许有更好的办法?
我希望有人能为我在Spring Boot项目中对JPA实体的困惑提供一些帮助。我听说在Spring项目中不应该调用< code>new。我知道这是为了让Spring管理所有的bean,可以通过注入或通过应用程序上下文显式地获得bean。 但是,我不清楚如何获得新的 JPA 实体。如果我有一个用 注释的类和一个处理数据访问的存储库类,如何在服务层中获取新的实体对象? 我已经在应用程序的主类中包含,所