Гибернация: не удается найти по UUID - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь использовать UUID в качестве идентификаторов для своей базы данных, но у меня просто не получается, чтобы он работал.

Первая попытка была:

@Id
@GeneratedValue(generator = "hibernate-uuid")
@GenericGenerator(name = "uuid", strategy = "uuid4")
private UUID id;

, но это генерирует уродливый байтовый код. Итак, я добавил аннотацию типа:

@Id
@GeneratedValue(generator = "hibernate-uuid")
@GenericGenerator(name = "uuid", strategy = "uuid4")
@Type(type="org.hibernate.type.UUIDCharType")
private UUID id;

с этим я получаю символьное представление в моей mysql базе данных, но запрашивая базу данных с использованием моего репозитория:

public interface CommentsRepository extends CrudRepository<Comment, UUID> {

    Comment findById(final UUID imageId);
}

не нашел никакого результата - даже если запись с данным UUID существует, она не вернет результат. Даже если я использую простой SQL непосредственно в своей базе данных, он не найдет никакого результата.

Есть ли что-то еще, что мне нужно сделать, чтобы заставить UUID работать?

EDIT

Попробуйте это:

@Data
@Entity
public class Comment implements Serializable {

    @Id
    @GeneratedValue(generator = "uuid2")
    @GenericGenerator(name = "uuid2", strategy = "uuid2")
    @Type(type = "uuid-char")
    private UUID id;
}

и добавьте некоторые значения по умолчанию:

@Component
@Slf4j
public class CommentsSampleData implements CommandLineRunner {

    private final CommentsRepository repository;

    @Autowired
    public CommentsSampleData(final CommentsRepository repository) {
        this.repository = repository;
    }

    @Override
    public void run(String... args) {
        repository.save(new Comment());
        repository.save(new Comment());
        repository.save(new Comment());
        repository.save(new Comment());
    }
}

Результаты в следующей таблице:

enter image description here

performing:

SELECT * FROM comment WHERE id = 'b076a9f7-7e9e-4f5a-91f8-e66c7d076fac' 

results in:

введите описание изображения здесь

что означает отсутствие результата, но он должен быть. Использование jpa также ничего не возвращает.

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Пробовали ли вы эту аннотацию uuid, возможно:

@Id
GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(columnDefinition = "BINARY(16)")
private UUID id;

Этот образец должен работать с java.util.UUID.

РЕДАКТИРОВАТЬ: Я читал, что у вас могут возникнуть проблемы с установлен двоичный тип, поэтому вы также можете попробовать явно установить его на char uuid с помощью:

@Type(type="uuid-char")
0 голосов
/ 03 августа 2020

Работает со следующим:

@Id
@GeneratedValue(generator = "uuid4")
@GenericGenerator(name = "UUID", strategy = "uuid4")
@Type(type = "org.hibernate.type.UUIDCharType")
@Column(columnDefinition = "CHAR(36)")
private UUID id;
...