2015-07-01 13 views
8

Oto moja klasa pojoJak wygenerować niestandardowy identyfikator za pomocą hibernacji, to musi być kluczem podstawowym tabeli

@Entity 

public class Department { 


@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 

@Column(name="Department_Id") 

private Integer deptId; 


@Column(name="Department_Name",unique=true,nullable=false) 
private String deptName; 


@Column(name="Department_Description") 
@NotNull 
private String deptDesc; 
    //geters and setters 

Co chcę jest, że department_id musi być klucz podstawowy tabeli i wpisy Departament ten klucz musi być jak DEP0001, DEP0002, DEP003

+0

http://supportmycode.com/2014/08/22/custom-id-generator-in-hibernate/ –

+0

Co DB używasz? – mrh

+0

Używam mysql –

Odpowiedz

12

Dziękuję wszystkim za odpowiedź ...... w końcu zrobiłem kilka zmian w mojej klasie Department i użyłem klasy do generowania identyfikatorów ........ Tutaj to mój kod

@Entity 
public class Department { 

@Id 
@GenericGenerator(name = "sequence_dep_id", strategy = "com.xyz.ids.DepartmentIdGenerator") 
@GeneratedValue(generator = "sequence_dep_id") 
@Column(name="Department_Id") 
private String deptId; 

@Column(name="Department_Name",unique=true,nullable=false) 
private String deptName; 


@Column(name="Department_Description") 
@NotNull 
private String deptDesc; 

//getters and setters 

DepartmentIdGenerator.java

package com.xyz.ids; 

import java.io.Serializable; 
import java.sql.*; 
import org.hibernate.HibernateException; 
import org.hibernate.engine.spi.SessionImplementor; 
import org.hibernate.id.IdentifierGenerator; 

public class DepartmentIdGenerator implements IdentifierGenerator{ 

    @Override 
    public Serializable generate(SessionImplementor session, Object object) 
      throws HibernateException { 

     String prefix = "DEP"; 
     Connection connection = session.connection(); 

     try { 
      Statement statement=connection.createStatement(); 

      ResultSet rs=statement.executeQuery("select count(Department_Id) as Id from demo.Department"); 

      if(rs.next()) 
      { 
       int id=rs.getInt(1)+101; 
       String generatedId = prefix + new Integer(id).toString(); 
       System.out.println("Generated Id: " + generatedId); 
       return generatedId; 
      } 
     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


     return null; 
    } 

} 
+0

eclipse skarży się na to, mówiąc, że żaden generator o nazwie nie został zdefiniowany w jednostce trwałości – erickdeoliveiraleal

+0

czy zdefiniowałeś go również w pliku persistence.xml lub jest to błąd w czasie zaćmienia? – erickdeoliveiraleal

+2

Brak tego jest, gdy usuwamy jeden wpis z tabeli i próbujemy utworzyć nowy. możemy mieć naruszenie ograniczenia klucza głównego! –