使用 jdbctemplate 插入行,主键由 @GeneratedValue 生成
Insert row using jdbctemplate with PrimaryKey generated by @GeneratedValue
我正在 Spring 引导应用程序中向 Oracle table 插入一行。需要使用注释生成主键。我有一个代表 table:
的实体模型
@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 class 来实现 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 插入 table 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 class 与 JdbcTemplate 一起使用。如何指示JdbcTemplate生成主键值?
你不能,因为 @Entity
和你使用的所有注释如 @GeneratedValue
、@GenericGenerator
等来自 JPA
而 JdbcTemplate
在幕后是仅基于 JDBC,它对 JPA 一无所知。
如果你想使用 JPA 来管理你的数据,你需要看的是选择一个 JPA 实现(例如 Hibernate 是一个流行的实现)并研究如何通过 JPA 接口使用它而不是看 JdbcTemplate
.
一旦您掌握了使用 JPA 管理数据的基本思路,您可以考虑查看 spring 数据,这是一个构建在纯 JPA 之上的更高级别的工具,可以帮助实现存储库/DAO用于管理和查询数据的东西。
我正在 Spring 引导应用程序中向 Oracle table 插入一行。需要使用注释生成主键。我有一个代表 table:
的实体模型@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 class 来实现 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 插入 table 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 class 与 JdbcTemplate 一起使用。如何指示JdbcTemplate生成主键值?
你不能,因为 @Entity
和你使用的所有注释如 @GeneratedValue
、@GenericGenerator
等来自 JPA
而 JdbcTemplate
在幕后是仅基于 JDBC,它对 JPA 一无所知。
如果你想使用 JPA 来管理你的数据,你需要看的是选择一个 JPA 实现(例如 Hibernate 是一个流行的实现)并研究如何通过 JPA 接口使用它而不是看 JdbcTemplate
.
一旦您掌握了使用 JPA 管理数据的基本思路,您可以考虑查看 spring 数据,这是一个构建在纯 JPA 之上的更高级别的工具,可以帮助实现存储库/DAO用于管理和查询数据的东西。