2014-11-05 84 views
1

我实现了一个自定义的生成,对我的申请,我想发出一个字符串作为第二个参数IdentifierGenerator接口,但我没有得到任何线索如何做到这一点。不幸的是,因为下面的代码,它将null2设置为生成的密钥。请帮忙。发送字符串第二个参数IdentifierGenerator - 休眠

我想送一个字符串,它是从客户端作为第二个参数的“日期”。

谢谢。

public class CourierTransImpl implements IdentifierGenerator{ 
private String appendString; 
@Override 
public Serializable generate(SessionImplementor session, Object arg1) 
     throws HibernateException { 
    Connection connection = session.connection(); 
    int id=0; 
     try { 

      PreparedStatement ps = connection 
        .prepareStatement("SELECT MAX(TRANS_ID) as value from SecurePass.COURIER_TRANSACTIONS_SER_TABLE"); 

      ResultSet rs = ps.executeQuery(); 
      if (rs.next()) { 
       id = rs.getInt("value"); 
       id++; 
      } 
      ps = connection 
        .prepareStatement("INSERT INTO SecurePass.COURIER_TRANSACTIONS_SER_TABLE VALUES("+id+")"); 
      ps.execute(); 
     } catch (SQLException e) {  
      e.printStackTrace(); 
     } 
     return appendString+id; 
} 
public String getAppendString() { 
    return appendString; 
} 
public void setAppendString(String appendString) { 
    this.appendString = appendString; 
} 

} 

回答

0

您可以实现Configurable接口和覆盖configure为您的要求。通过这样做,如果你想通过一些动态值,那么你可以在你的实体定义的@Transient属性,然后访问你只能通过一个静态值作为参数传递给CourierTransImpl

,在你的CourierTransImpl类属性。

详细说明:

例如,让我们说,有一个实体,称为Employee,它有一个名为empType那么你可以这样定义实体的过渡性质。

@Entity 
public class Employee { 

    @Id 
    @GeneratedValue(generator = "UniqueIdGenerator") 
    @GenericGenerator(name = "UniqueIdGenerator", strategy = "com.CourierTransImpl", 
    parameters = { @Parameter(name = "appendString", value = "Emp") }) 
    private String id; 
    private String name; 
    @Transient 
    private String empType; 

    // Getters & Setters 
} 

在上面的代码中,你可以看到,我们设置的参数appendString,这是我们在这里设置为“的Emp”静态值。

现在CourierTransImpl类实现可配置接口:

public class CourierTransImpl implements IdentifierGenerator, Configurable { 

private String appendString; 

@Override 
public Serializable generate(SessionImplementor session, Object object) 
     throws HibernateException { 
    Connection connection = session.connection(); 
    int id = 0; 
    try { 
     Employee emp = (Employee) object; 
     id = ..; // your logic to get the id from database 

     // Now you can use the parameter appendString which is static value set to "Emp" 
     // You can also access any of the employee properties here, so in your code you can set the required value dynamically. 
     return appendString + emp.getEmpType()+id; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return appendString + id; 
} 

@Override 
public void configure(Type type, Properties params, Dialect d) 
     throws MappingException { 
    setAppendString(params.getProperty("appendString")); // Here we are setting the parameters. 
} 

// Setters & Getters 

}

在这个例子中,如果我创建的Employee一个对象,并设置empType一些价值说“经理人”,那么休眠生成和ID像“Emp1Manager”。

+0

很不错的..所以非常感谢我一直在寻找这只是..! – Abhijeet 2014-11-06 05:39:28

0

你的问题还不清楚,但它显示null2的原因是你的appendString为空,而不是initialized.I猜你需要的appendString设定的日期。

+0

其实这应该是问题而不是答案评论。 – Chaitanya 2014-11-05 12:14:01

+0

如果你研究它清楚地理解问题的文本。现在,我甚至都不需要'appendString' – Abhijeet 2014-11-06 05:40:29

相关问题