Skip to main content
added 1220 characters in body
Source Link
Mulgard
  • 10.8k
  • 38
  • 147
  • 243

Im trying to use UUID's as ids for my database but I simply do not get it working.

First attempt was:

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

but this is generating some ugly byte code. So I added a type annotation:

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

with this I get a character representation in my mysql database but querying the database using my repository:

public interface CommentsRepository extends CrudRepository<Comment, UUID> {

    Comment findById(final UUID imageId);
}

wont find any result - even if an entry with the given UUID exists it wont return the result. Even if I use plain SQL directly on my database it wont find any result.

Is there something else I need to do to get UUID's working?

EDIT

Trying this:

@Data
@Entity
public class Comment implements Serializable {

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

and adding some default values:

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

Results in the following table:

enter image description here

performing:

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

results in:

enter image description here

which means no result but there should be one. Using jpa also does not return anything.

Im trying to use UUID's as ids for my database but I simply do not get it working.

First attempt was:

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

but this is generating some ugly byte code. So I added a type annotation:

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

with this I get a character representation in my mysql database but querying the database using my repository:

public interface CommentsRepository extends CrudRepository<Comment, UUID> {

    Comment findById(final UUID imageId);
}

wont find any result - even if an entry with the given UUID exists it wont return the result. Even if I use plain SQL directly on my database it wont find any result.

Is there something else I need to do to get UUID's working?

Im trying to use UUID's as ids for my database but I simply do not get it working.

First attempt was:

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

but this is generating some ugly byte code. So I added a type annotation:

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

with this I get a character representation in my mysql database but querying the database using my repository:

public interface CommentsRepository extends CrudRepository<Comment, UUID> {

    Comment findById(final UUID imageId);
}

wont find any result - even if an entry with the given UUID exists it wont return the result. Even if I use plain SQL directly on my database it wont find any result.

Is there something else I need to do to get UUID's working?

EDIT

Trying this:

@Data
@Entity
public class Comment implements Serializable {

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

and adding some default values:

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

Results in the following table:

enter image description here

performing:

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

results in:

enter image description here

which means no result but there should be one. Using jpa also does not return anything.

Source Link
Mulgard
  • 10.8k
  • 38
  • 147
  • 243

Hibernate: Cannot find by UUID

Im trying to use UUID's as ids for my database but I simply do not get it working.

First attempt was:

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

but this is generating some ugly byte code. So I added a type annotation:

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

with this I get a character representation in my mysql database but querying the database using my repository:

public interface CommentsRepository extends CrudRepository<Comment, UUID> {

    Comment findById(final UUID imageId);
}

wont find any result - even if an entry with the given UUID exists it wont return the result. Even if I use plain SQL directly on my database it wont find any result.

Is there something else I need to do to get UUID's working?