当前位置: 首页 > 面试题库 >

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

苏硕
2023-03-14
问题内容

我已经为我的应用程序实现了一个自定义生成器,并且我想将字符串作为第二个参数发送到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;
}

}

问题答案:

您可以实现可配置接口,并根据需要覆盖配置。这样,您只能将静态值作为参数传递给CourierTransImpl

如果要传递一些动态值,则可以@Transient在实体中定义一个属性,然后在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,实现Configurable接口的类:

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将生成和ID,例如“
Emp1Manager”。



 类似资料:
  • 问题内容: 我想发送一个字符串作为ajax Post参数。 如下代码: 不管用。为什么? 问题答案: 尝试这样:

  • 是否可以在序列中将字符串值发送到基于SqlView的层?我的参数类似于日期(包含破折号),如果我像这样将其放入请求中:http://x.y.z/geoserver/db/wms?service=WMS 服务器提供错误信息:XYZ为整数,SQL查询不正确-未显示任何层。 我知道这个解决方案很危险,但我不得不同意。

  • 我正在处理一个关于codingbat的问题,这个问题说:给定一个字符串和第二个“单词”字符串,我们会说这个单词匹配字符串,如果它出现在字符串的前面,除了它的第一个字符不需要完全匹配...在匹配时,返回字符串的前面,或以其他方式返回空字符串。所以,所以用字符串“河马”,“嗨”这个词返回“嗨”,“xip”返回“臀部”。单词长度至少为1。我不能解决它,但在网上找到了一个解决方案,代码如下所示。代码工作,

  • 它给了我下面的回应 请帮我把这个治好。

  • 我在Excel中的VBA宏中使用了以下代码: 在即时窗口中,我收到了以下错误: 400 Apache Tomcat/8.0.28-错误报告1{font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;}H2{font-family:Tahoma,Arial,sans-serif;颜

  • 问题内容: 我有一个关于JAXB的简单问题。这是示例代码: 如何初始化使用其他对象的String的输入元素? 问题答案: 您可以直接创建一个实例,或者如果您是从XML模式生成的Java模型,请在生成的类上使用convience方法。 schema.xsd 上面的演示代码基于从以下XML模式生成的Java模型。你会得到一个原因摆在首位属性是当你有一个既是元素和。 根 以下类是从中生成的,并且包含与您