2015-06-01 9 views
10

Ich versuche, eine UUID als Primärschlüssel mit Hibernate zu verwenden, und lassen Sie PostgreSQL oder Hibernate diese IDs automatisch generieren. Idealerweise hätte ich auch gern java.util.UUID Objekt, mit dem ich auch arbeiten kann.Hibernate/JPA 2/PostgreSQL - Entity UUID als Primärschlüssel

Um dies zu tun, versuche ich, die java.util.UUID auf den UUID-Datentyp in Postgres abzubilden. Ich kann Hibernate dazu bringen, die Datenbank korrekt zu generieren und Daten in die Tabelle der Entität zu schreiben. Beim Abrufen der Daten über Spring bekomme ich jedoch Folgendes:

Entschuldigung, wenn dies eine einfache Lösung ist; Ich bin sehr neu in Spring/Hibernate. Einige Hilfe würde sehr geschätzt werden.

@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 ist wie folgt

<?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> 

Antwort

8

es selbst gelöst. Es stellte sich heraus, ich hatte vergessen, die Repository-Klasse zu aktualisieren, um java.util.UUID und nicht String zu verwenden.

@RepositoryRestResource(collectionResourceRel = "brand", path = "brand") 
public interface BrandRepo extends PagingAndSortingRepository<Brand, UUID> { // Was previously <Brand, String> 
    List<Brand> findByBrand(@Param("brand") String brand); 
} 
Verwandte Themen