package com.QA; import org.hibernate.annotations.ForeignKey; import org.hibernate.annotations.Index; import org.hibernate.annotations.Type; import org.hibernate.search.annotations.DocumentId; import org.hibernate.search.annotations.FieldBridge; import org.hibernate.search.bridge.builtin.IntegerBridge; import org.jblooming.ontology.SecuredLoggableSupport; import javax.persistence.*; import java.io.Serializable; import java.util.Date; @Entity @Table(name = "qa_answer_revision") public class AnswerRevision extends SecuredLoggableSupport { private QAOperator editor; private Date revisionDate; private Answer revisionOf; private String formerText; @Id @Type(type = "int") @GeneratedValue(strategy = GenerationType.AUTO) @DocumentId @FieldBridge(impl = IntegerBridge.class) public Serializable getId() { return super.getId(); } @ManyToOne(targetEntity = QAOperator.class) @ForeignKey(name = "fk_answrev_own") @Index(name = "idx_answrev_own") @JoinColumn(name = "editorx") public QAOperator getEditor() { return editor; } public void setEditor(QAOperator editor) { this.editor = editor; } public Date getRevisionDate() { return revisionDate; } public void setRevisionDate(Date revisionDate) { this.revisionDate = revisionDate; } @ManyToOne(targetEntity = Answer.class) @ForeignKey(name = "fk_answrev_qst") @Index(name = "idx_answrev_qst") public Answer getRevisionOf() { return revisionOf; } public void setRevisionOf(Answer revisionOf) { this.revisionOf = revisionOf; } @Lob public String getFormerText() { return formerText; } public void setFormerText(String formerText) { this.formerText = formerText; } public static AnswerRevision createRevision(Answer answer, QAOperator editor) { AnswerRevision qr = new AnswerRevision(); qr.setFormerText(answer.getText()); qr.setRevisionOf(answer); qr.setEditor(editor); qr.setRevisionDate(new Date()); return qr; } }