【发布时间】:2019-11-17 06:22:37
【问题描述】:
我有一个指向 postgresql 表的实体类。下面是表结构。 paymentreferencenumber 是由触发器填充的 PK。 id 字段是序列生成的字段。当我尝试使用 JPARepository 保存方法在此表中保存时,它会插入第一条记录。但之后由于主键约束而失败。由于 PK 是字符串类型并使用触发器生成,因此我将生成器策略指定为“选择”。任何人都可以帮助我使用这个阻止程序并为我指明正确的方向。谢谢
表结构--
custId serial not null,
paymentreferencenumber varchar(32) not null
constraint customers1_pkey
primary key,
firstname varchar(255),
lastname varchar(255)
Entity class --
@Entity
@Table(name = "customersnew")
public class Customer implements Serializable {
private static final long serialVersionUID = -1L;
@GeneratedValue(generator = "seq")
@GenericGenerator(name="seq", strategy="sequence", parameters = { @Parameter(name="key", value = "customersnew_custid_seq")})
@Column(name = "custid")
private long id;
@Id
@GeneratedValue(generator = "trigger_generated")
@GenericGenerator(name="trigger_generated", strategy="select", parameters = { @Parameter(name="key", value = "id")})
@Column(name = "paymentreferencenumber")
private String refNum;
@Column(name = "firstname")
private String firstName;
@Column(name = "lastname")
private String lastName;
}
--- Controller using JPA save
@RestController
public class CustomerController {
@Autowired
CustomerRepository repository;
EntityManagerFactory emf;
public CustomerController(CustomerRepository repository, EntityManagerFactory emf) {
this.repository = repository;
this.emf = emf;
}
@PostMapping("/create")
public String create(@RequestBody CustomerUI customer){
// save a single Customer
Customer returnObj = repository.saveAndFlush(new Customer(customer.getFirstName(), customer.getLastName()));
PersistenceUnitUtil util = emf.getPersistenceUnitUtil();
Object retObj = util.getIdentifier(returnObj);
return "Customer is created";
}
【问题讨论】:
标签: jpa spring-data-jpa