2013-08-21 2 views
2

по какой-то причине я не могу найти подходящий ответ для этого. У меня есть следующий простой объект:FindByUUID() с использованием репозитория JPA Spring Data

@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; 
    } 
} 

Данные Spring JPA с Hibernate полностью создают все в моей базе данных MySQL. Однако, когда я пытаюсь использовать реализацию JPARepository для поиска элемента с помощью своего uuid, он никогда не найдет ничего, даже если он выполняет запрос на поиск в БД (который я вижу в своем отладчике). Вот моя реализация 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); 
} 

Я что-то упустил?

Благодарим за помощь!

+0

Покажите нам реализацию и соответствующий код, в котором вы вызываете метод. – DannyMo

ответ

1

Постарайся аннотировать UUID свойство с @org.hibernate.annotations.Type(type="org.hibernate.type.UUIDCharType")
или
@org.hibernate.annotations.Type(type="org.hibernate.type.UUIDBinaryType")

я столкнулся с проблемой, аналогичной базе данных во время запроса с UUID из-за MSB/LSB свопа с UUID в двоичном формате; мы решили проблему обработки данных как String и сделать необходимое преобразование перед преобразованием.

+0

Вы хотите отметить аннотацию thefield: protected UUID uuid; с этим? –

+0

Я пробовал это, и он тоже не работает. –

Смежные вопросы