2015-06-01 12 views
10

Tôi cố gắng để sử dụng một UUID như một khóa chính với Hibernate, và để cho PostgreSQL hoặc Hibernate tự động tạo ra những ID. Lý tưởng nhất, tôi cũng muốn có java.util.UUID đối tượng mà tôi có thể làm việc với quá.Hibernate/JPA 2/PostgreSQL - Entity UUID như một Primary Key

Để làm điều này, tôi đang cố gắng để lập bản đồ java.util.UUID đến kiểu dữ liệu UUID trong Postgres. Tôi có thể có được Hibernate để tạo ra cơ sở dữ liệu một cách chính xác, và đưa dữ liệu vào bảng của thực thể. Tuy nhiên, truy xuất lại dữ liệu qua Spring, tôi nhận được thông tin này:

Provided id of the wrong type for class com.example.somepackage.Brand. Expected: class java.util.UUID, got class java.lang.String; nested exception is java.lang.IllegalArgumentException: Provided id of the wrong type for class com.example.somepackage.Brand. Expected: class java.util.UUID, got class java.lang.String 

Xin lỗi nếu đây là cách khắc phục đơn giản; Tôi rất mới với Spring/Hibernate. Một số trợ giúp sẽ được đánh giá cao.

@Entity 
public class Brand { 

    @javax.persistence.Id 
    @GenericGenerator(name = "uuid-gen", strategy = "uuid2") 
    @GeneratedValue(generator = "uuid-gen") 
    @org.hibernate.annotations.Type(type="pg-uuid") 
    private UUID id; 
    private String brand; 

    public UUID getId() { 
     return id; 
    } 

    public void setId(UUID id) { 
     this.id = id; 
    } 

    public String getBrand() { 
     return brand; 
    } 

    public void setBrand(String brand) { 
     this.brand = brand; 
    } 
} 

Maven pom.xml như sau

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.example</groupId> 
    <artifactId>spring-rest-entity-test</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>spring-rest-entity-test</name> 
    <description>Test</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.2.3.RELEASE</version> 
     <relativePath/> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <start-class>com.example.somepackage.Main</start-class> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-jpa</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-rest</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-rest-core</artifactId> 
      <version>2.3.0.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-commons</artifactId> 
      <version>1.10.0.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-rest-webmvc</artifactId> 
      <version>2.3.0.RELEASE</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate.javax.persistence</groupId> 
      <artifactId>hibernate-jpa-2.0-api</artifactId> 
      <version>1.0.0.Final</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-jpa</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>postgresql</groupId> 
      <artifactId>postgresql</artifactId> 
      <version>9.1-901-1.jdbc4</version> 
     </dependency> 

    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

Trả lời

8

Giải quyết nó bản thân mình. Hóa ra tôi đã quên cập nhật lớp Repository để sử dụng java.util.UUID chứ không phải String.

@RepositoryRestResource(collectionResourceRel = "brand", path = "brand") 
public interface BrandRepo extends PagingAndSortingRepository<Brand, UUID> { // Was previously <Brand, String> 
    List<Brand> findByBrand(@Param("brand") String brand); 
} 
Các vấn đề liên quan