2016-07-01 6 views
0

私はclaimDetailオブジェクトを保存した後にIDを取得してから、保存されたオブジェクトのIDを取得するために、直面している問題は0になります。実際に私はその保存されたオブジェクトIDを取得したいです。しかし、それは来ていません。私はJPAで動作しませんでした。私はスケジューリングのためにSpring Bootアプリケーションを作成しました。ここでJPAでDBに保存されたオブジェクトの後にIDを取得するには?

は私のClaimDetails.javaのエンティティクラスである:

@Entity 
@Table(name = "claimtrans") 
public class ClaimTrans { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 
} 

    claimDetail.setActive(1); 
    claimDetail.setVersion(new Long(1)); 
    claimDetail.setCreatedBy(new Long(1)); 
    claimDetail.setCreatedDate(new Date()); 
    claimDetailService.saveClaimDetail(claimDetail); 

int temp =claimDetail.getID() 

tempが0です。ここで

は私JpaRepositoryFactory.javaです:ここでは

@Service 
public class ClaimDetailService { 

    private JpaRepositoryFactory jpaRepositoryFactory; 

    @Autowired 
    public ClaimDetailService(JpaRepositoryFactory jpaRepositoryFactory) { 
     this.jpaRepositoryFactory = jpaRepositoryFactory; 
    } 

    @Transactional 
    public void saveClaimDetail(ClaimDetail claimDetail) { 
     JpaRepository<ClaimDetail, Long> mailAuditLogLongJpaRepository = jpaRepositoryFactory.getRepository(ClaimDetail.class); 
     mailAuditLogLongJpaRepository.save(claimDetail); 
    } 

    public List<ClaimDetail> getAllClaimDetail() { 
     JpaRepository<ClaimDetail, Long> mailAuditLogLongJpaRepository = jpaRepositoryFactory.getRepository(ClaimDetail.class); 
     return mailAuditLogLongJpaRepository.findAll(); 
    } 
} 

は私のJPA工場です。

@Component 
public class JpaRepositoryFactory { 

    @PersistenceContext 
    private EntityManager entityManager; 

    public <T> T getRepository(Class clazz) { 
     notNull(clazz); 
     notNull(entityManager); 
     T crudRepository = (T) new SimpleJpaRepository(clazz, entityManager); 
     return crudRepository; 
    } 
} 

のpom.xml

<parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.3.5.RELEASE</version> 
    </parent> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <start-class>org.sam.application.Application</start-class> 
     <java.version>1.6</java.version> 
    </properties> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-jdbc</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.10</version> 
     </dependency> 

誰もがこの問題を解決する方法を私を助けてくださいことができますか?

おかげ Sitansu

+0

claimオブジェクトの投稿 – Deepanjan

+0

@Deepanjan私の質問 – Sitansu

+0

を更新しましたので、どのようなSQLが呼び出されましたか?別名「デバッグのステップ1」 –

答えて

1

は、コンフィギュレーション・クラスを作成し、このような何かを行います。

@Configuration 
public class ClaimDetailService { 


public interface ClaimDetailRepository extends JpaRepository<Claimtrans, String>{ 
    ClaimDetail findById(String id); 
} 

    @Autowired 
    ClaimDetailRepository claimDetailRepository; 

    @Autowired 
    public void save(){ 
     ClaimTrans claimDetail=new ClaimTrans(); 
     claimDetail.setId(UUID.randomUUID.toString()); 
     claimDetail.setActive(1); 
     claimDetail.setVersion(new Long(1)); 
     claimDetail.setCreatedBy(new Long(1)); 
     claimDetail.setCreatedDate(new Date()); 
     claimDetailRepository.save(claimDetail); 

    int temp =claimDetailRepository.findById(claimDetail.getId()); 

    } 

} 
1

JPA仕様では、提供されたエンティティオブジェクトが保存後に更新されることは保証されません。保存されたJPAエンティティを取得するには、save()メソッドの戻り値を使用する必要があります。たとえば、あなたのサービスがこのように変更することができます

@Service 
public class ClaimDetailService { 
    ... 
    @Transactional 
    public ClaimDetail saveClaimDetail(ClaimDetail claimDetail) { 
     JpaRepository<ClaimDetail, Long> mailAuditLogLongJpaRepository = jpaRepositoryFactory.getRepository(ClaimDetail.class); 
     return mailAuditLogLongJpaRepository.save(claimDetail); 
    } 
    ... 
} 

をそして、あなたのサンプルコードは次のようになります直接あなたの問題に関連していないが、

claimDetail.setActive(1); 
claimDetail.setVersion(new Long(1)); 
claimDetail.setCreatedBy(new Long(1)); 
claimDetail.setCreatedDate(new Date()); 
ClaimDetail savedClaimDetail = claimDetailService.saveClaimDetail(claimDetail); 
int temp = savedClaimDetail.getID() 

また、あなたが作成する必要はありません。 Springのデータリポジトリは、あなたがそれを行ったやり方です。 JPARepositoryを拡張する独自のインタフェースを作成するだけです。

関連する問題