2013-12-10 16 views
12

Tôi đang làm việc trên dự án nơi tôi sử dụng dữ liệu mùa xuân. Tôi muốn điền vào trường creationTime bằng cách sử dụng @CreatedDate chú thích thay vì sử dụng phương pháp có chú thích @PreUpdate hoặc @PrePersist (làm theo cách này hoạt động hoàn hảo). Khi tôi làm điều đó với @CreatedDate, nó chỉ để trống trường này. Tôi sử dụng cơ sở dữ liệu postgresql. Documentation không phải là rất hữu ích.Dữ liệu Spring @CreatedDate chú thích không hoạt động cho tôi

Bạn có biết làm cách nào để khắc phục sự cố không? Cảm ơn bạn!

import org.springframework.data.annotation.CreatedDate; 
@Entity 
@Table(name = "software") 
public class Software implements Serializable { 

    // ... 

    @Column(name = "creation_time") 
    @CreatedDate 
    private Date creationTime; 
    //... 
} 

My applicationContext:

<jpa:repositories base-package="path.to.dao"/> 


<context:component-scan base-package="path.to.dao"/> 
<context:property-placeholder location="classpath:application.properties"/> 


<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="${db.driver}"/> 
    <property name="url" value="${db.url}"/> 
    <property name="username" value="${db.username}"/> 
    <property name="password" value="${db.password}"/> 
</bean> 

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="packagesToScan" value="path.to.bean"/> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="jpaVendorAdapter" ref="jpaAdapter"/> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
      <prop key="hibernate.format_sql">${hibernate.format_sql}</prop> 
      <prop key="hibernate.ejb.naming_strategy">${hibernate.ejb.naming_strategy}</prop> 
      <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> 
     </props> 
    </property> 
</bean> 

<bean id="jpaAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/> 

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory"/> 
</bean> 

+0

Bạn đang sử dụng cái gì để duy trì thực thể? –

+0

Ý của tôi là bạn đang sử dụng phiên 'trực tiếp' hoặc bạn có bền bỉ thông qua dịch vụ Dữ liệu Mùa xuân không? –

+0

Tôi có giao diện 'SoftwareRespository' mở rộng' JpaRepository ' – alicjab

Trả lời

11

tôi có thể có được trong một tình huống tương tự mà tôi muốn chú thích mùa xuân dữ liệu JPA @CreatedDate để làm việc, nhưng không có nhu cầu cho người sử dụng cấp kiểm toán được mô tả khác trong tài liệu của họ.

Để kiểm tra dựa trên chú thích hoạt động, tôi vẫn phải thêm lớp vào dự án của tôi đã triển khai org.springframework.data.domain.AuditorAware. Điều này là kỳ quặc bởi vì bạn dường như không sử dụng giá trị trả về từ phương thức getCurrentAuditor() mà bạn sẽ triển khai; của tôi chỉ trả về null.

public class NullAuditorBean implements AuditorAware { 

    @Override 
    public Object getCurrentAuditor() { 
     return null; 
    } 
} 

sau đó tôi cần phải tham khảo của tôi "đối tượng null" AuditorAware thực hiện trong một entry trong applicationContext của tôi để kích hoạt các kiểm toán JPA. Tôi phải chắc chắn rằng tôi đã làm điều này trước khi dòng xác định jpa:repositories. Đây trông giống như sau:

<bean id="auditorBean" class="your.package.subbed.here.NullAuditorBean"/> 
<jpa:auditing auditor-aware-ref="auditorBean"/> 

Tôi cũng đã có thêm một tập tin orm.xml, và cần thiết để chính thức tham chiếu đến nó như là một tài sản của đậu entityManagerFactory của tôi, như vậy:

<property name="mappingResources"> 
    <value>META-INF/orm.xml</value> 
</property> 

Hãy chắc chắn rằng META-INF/orm.xml mục này được lưu trữ với đầu ra biên dịch của bạn (của tôi là trong WAR của tôi theo WEB-INF/classes.

Đó là orm.xml tệp, cho bản ghi, chứa một số bản mẫu, có thể được tìm thấy trong câu trả lời cho this related question.

Đó là một lượng công việc hợp lý khi tôi làm việc này. Bạn có thể thích giải pháp làm việc trước đây của bạn!

+0

Cảm ơn! Nó đã giúp đỡ tôi. Trong tương lai tôi sẽ thêm Spring Security vào dự án của mình và sau đó tôi sẽ thay đổi NullAuditor của tôi thành một cái gì đó phù hợp. – alicjab

+0

orm.xml đã khắc phục sự cố của tôi – cjungel

+3

Đối với cấu hình dựa trên phụ đề. Bạn có thể thêm @EnableJpaAuditing ("nullAuditorBean") – sanket1729

Các vấn đề liên quan