gpt4 book ai didi

java - 使用 jdbctemplate 插入行,PrimaryKey 由 @GenerateValue 生成

转载 作者:行者123 更新时间:2023-12-02 01:45:03 25 4
gpt4 key购买 nike

我正在 Spring Boot 应用程序中的 Oracle 表中插入一行。主键需要使用注释来生成。我有一个代表表的实体模型:

@Entity
@Table(name="PURCH_TENDR")
public class LhlPurchTendrModel implements Serializable {

@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@Column(name="PURCH_TENDR_ID")
private String purchTendrId;

@Column(name="CREATED_BY_NM")
private String createdByNm;

@Column(name="CREATED_DT")
private Timestamp createdDt;

@Column(name="UPDATED_BY_NM")
private String updatedByNm;

@Column(name="UPDATED_DT")
private Timestamp updatedDt;

@Column(name="MODIFY_BY_NM")
private String modifyByNm;

@Column(name="MODIFY_DT")
private Timestamp modifyDt;

@Column(name="CARRIER_TENDER_ID")
private long CarrierTenderId;

@Column(name="EVENT_GMT_TM")
private Timestamp EventGmtTm;

@Column(name="PURCH_COST_ID")
private int PurchCostId;

@Column(name="LAT")
private float Lat;

@Column(name="LON")
private float Lon;

@Column(name="CITY_NM")
private String cityNm;

@Column(name="STATE_CD")
private String stateCd;

@Column(name="CARER_EDI_NBR")
private String carerEdiNbr;

@Column(name="EVENT_STAT_CD")
private String eventStatCd;

@Column(name="ETN_TM")
private Timestamp EtnTm;

@Column(name="PCKUP_NBR")
private String PickupNbr;

@Column(name="VIN")
private String Vin;

@Column(name="EQUIP_NBR")
private String EquipNbr;

@Column(name="EQUIP_PREFIX")
private String EquipPrefix;

这些成员变量也有 getter 和 setter。我使用 Repository 类来实现 jdbctemplate 来插入行。当我使用插入的这种变体时,我收到列类型无效的错误:

public boolean insertPurchaseInfo(LhlPurchTendrModel lhlPurchTendrModel) throws SQLException {
boolean success= false;
String ds = lhlJdbcTemplate.getDataSource().getConnection().getSchema();
LOGGER.info("Schema and Insert Purchase Info {}", ds);
String insertSequenceNbrSQLStatement = "INSERT INTO purch_tendr(created_by_nm, created_dt, modify_by_nm, modify_dt, carrier_tender_id, purch_cost_id, event_stat_cd, equip_nbr, equip_prefix) " +
"VALUES (?, SYSDATE, ?, SYSDATE, ?, ?, ?, ?, ?)";
try{
int rowsInserted = lhlJdbcTemplate.update(
insertSequenceNbrSQLStatement,
new Object[] {lhlPurchTendrModel});

if(rowsInserted > 0){
success = true;
}
}

当我尝试使用此代码插入时,出现错误“无法将 NULL 插入表 Purch_Tendr 列 Purch_Tendr_Id”。

public boolean insertPurchaseInfo(LhlPurchTendrModel lhlPurchTendrModel) throws SQLException {
boolean success= false;
String ds = lhlJdbcTemplate.getDataSource().getConnection().getSchema();
LOGGER.info("Schema and Insert Purchase Info {}", ds);
String insertSequenceNbrSQLStatement = "INSERT INTO purch_tendr(created_by_nm, created_dt, modify_by_nm, modify_dt, carrier_tender_id, purch_cost_id, event_stat_cd, equip_nbr, equip_prefix) " +
"VALUES (?, SYSDATE, ?, SYSDATE, ?, ?, ?, ?, ?)";
try{
int rowsInserted = lhlJdbcTemplate.update(
insertSequenceNbrSQLStatement,
new Object[]{lhlPurchTendrModel.getCreatedByNm(), lhlPurchTendrModel.getModifyByNm(), lhlPurchTendrModel.getCarrierTenderId(), lhlPurchTendrModel.getPurchCostId(),
lhlPurchTendrModel.getEventGmtTm(), lhlPurchTendrModel.getEquipNbr(), lhlPurchTendrModel.getEquipPrefix()});
if(rowsInserted > 0){
success = true;
}
}

我不确定如何将 @Entity 类与 JdbcTemplate 一起使用。如何指示JdbcTemplate生成主键值?

最佳答案

您不能,因为 @Entity 和您使用的所有注释(例如 @GenerateValue@GenericGenerator 等)都来自 JPA 而幕后的 JdbcTemplate 仅基于 JDBC,对 JPA 一无所知。

如果你想使用JPA来管理你的数据,你需要看的是选择一个JPA实现(例如Hibernate是一种流行的实现)并研究如何通过JPA接口(interface)使用它,而不是查看JdbcTemplate .

一旦您掌握了使用 JPA 管理数据的基本想法,您可能会考虑查看 spring data,它是一个构建在纯 JPA 之上的更高级工具,可以帮助实现存储库/DAO 之类的东西来管理和管理数据。查询数据。

关于java - 使用 jdbctemplate 插入行,PrimaryKey 由 @GenerateValue 生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57464910/

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