Я использую аннотации в спящем режиме, Spring, sessionFactory и определяю все в context.xml (например, ..)
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="myDataSource" />
<property name="annotatedClasses">
<list>
<value>mypackage.model.Attributes</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.format_sql=true
</value>
</property>
</bean>
На моем объекте у меня есть несколько свойств, одно из которых является идентификатором, а другое - строковым значением "externalId", которое мне нужно сгенерировать автоматически. (в качестве примера это может быть «dev_», за которым следует 5-значное числовое значение, представляющее идентификатор. Поэтому, если идентификатор равен 4, то externalId будет равен «dev_00004»)
@Entity
@Table(name="ATTRIBUTES")
public class Attributes {
private Long id;
private String externalId;
...
...
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column( name = "ID" )
public Long getId() {
return id;
}
public void setId( Long p_id ) {
id = p_id;
}
@Column(name = "EXTERNALID")
public String getExternalId() {
return externalId;
}
public void setExternalId(String p_externalId) {
externalId = p_externalId;
}
...
...
Кто-нибудь знает, как мне этого добиться? Я заглянул в @PrePersist, но все дао и т. Д. Используют saveOrUpdate, и эти два, похоже, не идут рука об руку. Я подумал, что, возможно, @preUpdate может сработать, но, опять же, это не вызывается. Может ли кто-нибудь дать мне какие-либо идеи о том, как я мог бы достичь этого?
Спасибо!