मुझे पोस्टग्रेज डीबी को createDate और updateDate के साथ अपडेट करने की आवश्यकता है, मैंने दृष्टिकोण 1 का उपयोग करने का प्रयास किया, लेकिन यह शून्य मान डाल रहा है। जब मैं इसके बारे में पढ़ता हूं, ऐसा लगता है कि @prepersist एनोटेशन सत्र के लिए काम नहीं करता है।

तो मैंने दृष्टिकोण 2 के साथ जाने का फैसला किया: हाइबरनेट @CreationTimeStamp एनोटेशन, मैंने हाइबरनेट-एनोटेशन मेवेन निर्भरता जोड़ा, लेकिन @CreationTimeStamp हल नहीं हुआ है और संकलन त्रुटि देता है।

क्या कोई मुझे सलाह दे सकता है कि मैं इस मुद्दे को कैसे हल कर सकता हूं?

दृष्टिकोण 1 इकाई वर्ग @Entity और @Table . के साथ एनोटेट किया गया

      public class Status{
      @Id
    @Column(name = "run_id")
    private int run_id; 

    @Column(name = "status")
    private String status; 

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "created_date" , updatable=false)
    private Date created;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "updated_date" ,  insertable=false)
    private Date updated;

    @PrePersist
    protected void onCreate() {
        created = new Date();
    }


    @PreUpdate
    protected void onUpdate() {
        updated = new Date();
    }
//Getters and setters here
}

कार्यान्वयन वर्ग है

  sessionFactory.getCurrentSession().save(status);  

दृष्टिकोण २ @CreationTimeStamp और @updatedTimeStamp का उपयोग करके। लेकिन मावेन निर्भरता

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-annotations -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-annotations</artifactId>
    <version>3.5.0-Final</version>
</dependency>

इन एनोटेशन को क्लासपाथ में नहीं जोड़ता है

1
vijaya lakshmi 3 सितंबर 2019, 13:35

1 उत्तर

सबसे बढ़िया उत्तर

क्या कोई कारण है कि आप एक निकाय प्रबंधक के बजाय session.save() विधि का उपयोग कर रहे हैं? मैं संस्थाओं को जारी रखने और विलय करने के लिए एक इकाई प्रबंधक का उपयोग करके अपने आवेदन का एक उदाहरण पोस्ट करूंगा। साथ ही मैं java.util.Date के बजाय java.time.LocalDateTime का उपयोग कर रहा हूं, इसलिए मुझे @Temporal की आवश्यकता नहीं है।

यह भी मदद कर सकता है: JPA और हाइबरनेट के साथ एम्बेड करने योग्य पर @PrePersist और @PreUpdate का उपयोग कैसे करें यदि आप किसी निकाय प्रबंधक का उपयोग करना चाहते हैं तो यह मदद करेगा: हाइबरनेट इकाई प्रबंधक के लिए मार्गदर्शिका इकाई वर्ग:

public abstract class AbstractEntity implements Serializable {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(updatable = false, nullable = false)
  private Long id;

  @Column
  private LocalDateTime createdTimestamp;

  @Column
  private LocalDateTime modifiedTimestamp;

  @Version
  private Long version;

  @PrePersist
  public void setCreationDateTime() {
    this.createdTimestamp = LocalDateTime.now();
  }

  @PreUpdate
  public void setChangeDateTime() {
    this.modifiedTimestamp = LocalDateTime.now();
  }
  //Getter and setter
}

सार डेटाबेस सेवा वर्ग:

public abstract class AbstractDatabaseService {
  @PersistenceContext(name = "examplePU")
  protected EntityManager entityManager;
}

उदाहरण इकाई रिपोजिटरी इंटरफ़ेस:

public interface ExampleRepository {
  ExampleEntity save(ExampleEntity exampleEntity);
}

उदाहरण इकाई रिपोजिटरी कार्यान्वयन:

public class ExampleRepositoryImpl extends AbstractDatabaseService implements ExampleRepository , Serializable {
  @Transactional
  @Override
  public ExampleEntity save(ExampleEntity exampleEntity) {
    ExampleEntity toPersist;
    // Updating an already existing entity
    if (exampleEntity.getId() != null) {
      toPersist = entityManager.find(ExampleEntity .class, exampleEntity.getId());
      // Omitted merging toPersist with the given exampleEntity through a mapper class here
    } else {
      toPersist = exampleEntity;
    }
    try {
      toPersist = entityManager.merge(toPersist);
    } catch (Exception e) {
      // Logging e
    }
    return toPersist;
  }
}

उम्मीद है ये मदद करेगा।

4
PaulD 6 सितंबर 2019, 14:07