SpringBoot (6) Spring Data JPA (1)

 1. application.yml

This file is in the folder src/main/resources


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
spring:
#--JPA
  datasource:
    #--Connection Pool
    hiraki:   
      connectionTimeout: 20000
      maximumPoolSize: 5
    # PostgreSQL  
    url: jdbc:postgresql://localhost:5432/mydb
    driver-class-name: org.postgresql.Driver
    username: user
    password: password
  jpa:
    hibernate:
      ddl-auto: update
      show-sql: true  

This will create or update tables

2. Defining Entities to persist

There are many entries where defining entities but an Entity needs:
  • The @Entity annotation
  • The@Audited annotation if you want a control version
  • The @Table (name="table_name",  schema = "myschema", uniqueConstraints..., indexes ..)
  • All the related entities ( referenced in @OneToMany, @ManyToMany and ManyToOne) must be annotated with @Entity and @Audited (if any of the has the @Audited, then all classes should have this annotation also)

Common errors:

  • One of the entities has no @Entity annotation
  • One of the entities has no @Audited annotation and at least one of the related classes has this annotation
  • The REVINFO table is in another schema and causes duplicity of unique constraints when being interfered with another schema. In this case, you should see Thorben Janssen and create these 2 classes:
This class adds "username" to the REVINFO table and has been got from Spring SecurityContextHolder

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
package ximo.xotherapps.model.rrhh;

import org.hibernate.envers.RevisionListener;
import org.springframework.security.core.context.SecurityContextHolder;

public class MyRevisionListener implements RevisionListener {
	
	@Override
    public void newRevision(Object revisionEntity) {
		MyRevInfoEnvers rev = (MyRevInfoEnvers) revisionEntity;
        rev.setUserName(SecurityContextHolder.getContext().getAuthentication().getName());
    }
}

and this entity is for controlling the REVINFO table and having it in the same schema.

NOTE: When creating other schemas, the REVINFO table will be shared SO TAKE CARE !!!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
package ximo.xotherapps.model.rrhh;

import org.hibernate.envers.DefaultRevisionEntity;
import org.hibernate.envers.RevisionEntity;

import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;

@Entity
@Table(name = "RevInfoEnvers", schema = "rrhh" ) 
@RevisionEntity(MyRevisionListener.class)
public class MyRevInfoEnvers extends DefaultRevisionEntity {
 
	@Getter @Setter
    private String userName;
 
    
}

3. Using Repositories

If you are going to use only a few entities, you can use the default JPA repository, If you will you many Entities then you can use your own customized repository.

Comentarios

Entradas populares de este blog

SpringBoot (14) Let's start (2/10). Defining users