Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 发送字符串第二个参数IdentifierGenerator-Hibernate_Java_Hibernate - Fatal编程技术网

Java 发送字符串第二个参数IdentifierGenerator-Hibernate

Java 发送字符串第二个参数IdentifierGenerator-Hibernate,java,hibernate,Java,Hibernate,我已经为我的应用程序实现了一个自定义生成器,我想将一个字符串作为第二个参数发送到IdentifierGenerator接口,但我不知道如何做。不幸的是,由于下面的代码,它将null2设置为生成的密钥。请帮忙 我想从客户端发送一个“日期”字符串作为第二个参数 谢谢 public class CourierTransImpl implements IdentifierGenerator{ private String appendString; @Override public Serializab

我已经为我的应用程序实现了一个自定义生成器,我想将一个字符串作为第二个参数发送到IdentifierGenerator接口,但我不知道如何做。不幸的是,由于下面的代码,它将null2设置为生成的密钥。请帮忙

我想从客户端发送一个“日期”字符串作为第二个参数

谢谢

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;
}

}

您的问题不清楚,但显示
null2
的原因是您的
appendString
为null且未初始化。我想您需要将appendString设置为日期。

您可以实现该接口并根据您的要求重写。通过这样做,您只能将静态值作为参数传递给
CouriertTransimpl

如果要传递一些动态值,则可以在实体中定义一个
@Transient
属性,然后在
CouriertTransimpl
类中访问该属性

详细说明:

例如,假设有一个名为
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”

现在是实现可配置接口的
CouriertTransimpl
类:

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
设置为某个值,比如“Manager”,那么hibernate将生成一个类似于“Emp1Manager”的id。

实际上,这应该是对问题的注释,而不是答案。如果你研究了问题的文本,就会清楚地理解它。现在我甚至不需要
appendString