这里我试图在mysql
db中保留数据后获取自动生成的ID。
DTO课程
public class TradeTransaction {
private long tradetransactionid ;
private long borrowerid ;
private String operationalcountry ;
private String productcategory ;
private String producttype ;
private boolean ishazardous;
private boolean specialisedHandle;
private String currency;
private double transactionvalue;
private String suppliercountry;
@Id
@Column
public long getTradetransactionid() {
return tradetransactionid;
}
@Column
public long getBorrowerid() {
return borrowerid;
}
业务逻辑类要持久保存到数据库中。
EntityManager v_objEm;
EntityTransaction v_objTran;
TradeTransaction v_ObjectToPersist;
v_ObjectToPersist = new TradeTransaction();
v_ObjectToPersist.setBorrowerid(25);
v_ObjectToPersist.setOperationalcountry("India");
v_ObjectToPersist.setProductcategory("electornics");
v_ObjectToPersist.setProducttype("E9088"));
v_ObjectToPersist.setIshazardous(true);
v_ObjectToPersist.setSpecialisedHandle(true);
v_ObjectToPersist.setCurrency("usd");
v_ObjectToPersist.setTransactionvalue(2000.3);
v_ObjectToPersist.setSuppliercountry("african-based");
v_objEm = MyCustomClass.getEntityManager();
v_objTran = v_objEm.getTransaction();
v_objTran.begin();
v_objEm.persist(v_ObjectToPersist);
System.out.println(v_ObjectToPersist.getTradetransactionid()); //Transaction ID print as Zero.
v_objTran.commit();
System.out.println(v_ObjectToPersist.getTradetransactionid()); //Transaction ID print as Zero Here Too.
//v_objEm.refresh(v_ObjectToPersist); //not Working throwing Exception.
v_objEm.close();
我尝试了不同风格的代码,以便从Object
中获取自动生成的ID ,这只是持久存储到数据库中。但没有成功。
注意: - 此代码运行正常,并将数据保存到db
(无错误)。但是,无法获得自动生成的ID(这是primary key
在表中有多个引用)。
我迄今为止尝试过的链接
答案 0 :(得分:3)
这是一个很长的镜头,但无论如何我都会建议。
您已声明字段private long tradetransactionid;
这是一种基本类型。这意味着它不允许空值,并且在实例化时隐式为0。在数据库中持久保存对象时,尝试插入id等于0的项/对象。
您可以尝试private Long tradetransactionid;
,这是一种参考类型。这样它最初为null,可以通过自动生成来设置。
答案 1 :(得分:1)
要使用MySQL AUTO_INCREMENT
,您需要将PK字段标记为
@GeneratedValue(strategy=GenerationType.IDENTITY)
你没有。如果没有,JPA将不知道已在数据存储区中分配了ID
答案 2 :(得分:0)
entityManager.persist(model);
model.getTradetransactionid();
并尝试..
entityManager.flush();
答案 3 :(得分:0)
要使用MySQL自动生成的ID,您需要将主键标记为
@GeneratedValue(strategy=GenerationType.AUTO)