如何在使用JPA持久存入mysqlDB后获取自动生成的Id

时间:2016-06-13 07:33:21

标签: java mysql spring hibernate jpa

这里我试图在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在表中有多个引用)。 我迄今为止尝试过的链接

  1. jpa-returning-an-auto-generated-id-after-persist

  2. how-to-get-id-of-last-persisted-entity-using-jpa

  3. how-to-get-the-primary-key-of-any-jpa-entity

  4. 请帮帮我..任何帮助都会受到影响..

    谢谢。

4 个答案:

答案 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)