में प्रवेश करता है मैं अपनी परियोजना के लिए ऑडिट सेट करने का प्रयास कर रहा हूं। मैंने डिफ़ॉल्ट कॉन्फ़िगरेशन से शुरू किया जो ठीक काम करता है।बनाना कस्टम संशोधन इकाई
अगला चरण उस उपयोगकर्ता को स्टोर करना है जिसने परिवर्तन किए हैं।
package com.csbi.samples.utils.audit;
import java.io.Serializable;
import java.text.DateFormat;
import java.util.Date;
import org.hibernate.envers.RevisionNumber;
import org.hibernate.envers.RevisionTimestamp;
import org.hibernate.envers.RevisionEntity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
@Entity
@Table(name="REVISIONS")
@RevisionEntity(CustomRevisionListener.class)
public class CustomRevisionEntity implements Serializable {
private static final long serialVersionUID = -1255842407304508513L;
@Id
@GeneratedValue
@RevisionNumber
private int id;
@RevisionTimestamp
private long timestamp;
private String username;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Transient
public Date getRevisionDate() {
return new Date(timestamp);
}
public long getTimestamp() {
return timestamp;
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public boolean equals(Object o) {
if(this == o) return true;
if(!(o instanceof CustomRevisionEntity)) return false;
CustomRevisionEntity that = (CustomRevisionEntity) o;
if(id != that.id) return false;
if(timestamp != that.timestamp) return false;
if(timestamp != that.timestamp) return false;
if(username != that.username) return false;
return true;
}
public int hashCode() {
int result;
result = id;
result = 31 * result + (int) (timestamp^(timestamp >>> 32));
return result;
}
public String toString() {
return "DefaultRevisionEntity(user = " + username + "id = " + id + ", revisionDate = " + DateFormat.getDateTimeInstance().format(getRevisionDate()) + ")";
}
}
और यह भी कस्टम श्रोता:
package com.csbi.samples.audit;
import org.hibernate.envers.RevisionListener;
public class CustomRevisionListener implements RevisionListener {
public void newRevision(Object revisionEntity) {
CustomRevisionEntity revision = (CustomRevisionEntity) revisionEntity;
revision.setUsername("username"); //for testing
}
}
यहाँ लॉग से कुछ पंक्तियाँ है: मैनुअल के बाद मैं कस्टम इकाई संशोधन बनाया
डीबग: org .hibernate.envers.configuration.metadata.AuditMetadataGenerator - प्रथम-पी उत्पन्न करना इकाई com.csbi.samples.domain.Property के लिए गधा ऑडिटिंग मैपिंग।
DEBUG: org.hibernate.envers.configuration.metadata.AuditMetadataGenerator - इकाई com.csbi.samples.domain.Property के लिए दूसरी-पास ऑडिटिंग मैपिंग जेनरेट करना।
जानकारी: org.hibernate.cfg.HbmBinder - मानचित्रण वर्ग: com.csbi.samples.domain.Property_AUD -> PROPERTIES_AUD
जानकारी: org.hibernate.cfg.HbmBinder - मानचित्रण वर्ग: org.hibernate.envers। DefaultRevisionEntity -> REVINFO
आउटपुट की अंतिम पंक्ति पर नज़र डालें। CustomRevisionEntity
के बजाय DefaultRevisionEntity
मैप किया गया है।
मुझे नहीं पता कि क्या गलत है। कोई सुझाव?
अब ... कुछ अर्थपूर्ण के लिए "उपयोगकर्ता नाम" कैसे सेट करें ... मुझे यह सही नहीं मिल रहा है क्योंकि मुझे नहीं पता कि कौन संशोधन कर रहा है ?! –
यदि आप सीम का उपयोग करते हैं तो वसंत या सेवा कारखाने का उपयोग करते समय इंजेक्शन के लिए स्थैतिक चर का उपयोग करें। https://209.132.182.48/message/641790। उम्मीद है की वो मदद करदे। – Vyacheslav