3

何らかの理由で、これに対する適切な答えを見つけることができませんでした。次の単純なエンティティがあります。

@Entity
@Table(name = "simple_entity")
@Access(AccessType.FIELD)
public class SimpleEntity {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  protected Long id;

  @Column(unique = true, updatable = false)
  protected UUID uuid;

  @PrePersist
  protected void onCreateAbstractBaseEntity() {
      this.uuid = UUID.randomUUID();
  }

  public Long getId() {
      return this.id;
  }

  public UUID getUuid() {
      return this.uuid;
  }
}

Hibernate を使用した Spring Data JPA は、MySQL データベースにすべてを正しく作成します。ただし、JPARepository 実装を使用して uuid を使用してアイテムを検索しようとすると、DB で検索クエリを実行しても (デバッガーで確認できます)、何も見つかりません。これが私のJPARepositoryの実装です:

public interface SimpleEntityRepository extends JpaRepository<SimpleEntity, Long> {
      SimpleEntity findOneByUuid(UUID uuid);
}

このメソッドを呼び出すコントローラーは次のとおりです。

@Controller
@RequestMapping("/simple_entity")
public class SimpleEntityController {

@Autowired
private SimpleEntityRepository repository;

@RequestMapping(method = RequestMethod.GET, value = "/{simpleEntityId}", produces =        MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<FileDatastore> getSimpleEntity(@PathVariable UUID simpleEntityId)     {
    SimpleEntity record = this.repository.findOneByUuid(simpleEntityId);
    HttpHeaders headers = new HttpHeaders();

    HttpStatus status = (record != null) ? HttpStatus.OK : HttpStatus.NOT_FOUND;

    return new ResponseEntity<>(record, headers, status);
}

何か不足していますか?

ご協力いただきありがとうございます!

4

4 に答える 4

9

またはUUIDでプロパティに注釈を付けてみてください@org.hibernate.annotations.Type(type="org.hibernate.type.UUIDCharType")

@org.hibernate.annotations.Type(type="org.hibernate.type.UUIDBinaryType")

バイナリ形式UUIDでの MSB/LSB スワップが原因で、データベースのクエリ中に同様の問題に直面しました。UUIDデータを文字列として扱う問題を解決し、変換前に必要な変換を行いました。

于 2013-08-21T21:48:14.887 に答える