2016-11-01 3 views
0

私はMySQL DB内に解析されたURLを格納し、解析された文を入力するアプリケーションを持っており、次にカスケードを使用して解析されます。 ProcessedUrl POJOで列の値による行の複製からの休止の防止

私はフィールドを持っている:

Long id 
String url 
Date date 
Set<Sentence> sentences 

今のPKは、ネイティブのようにして生成されるIDです。私はそのようなものを達成したいと思います。ユーザーがすでに解析されてdbに保存されているURLを入力すると、再度解析されたり複製されたりしません。

hbm.xmlマッピングを使用してこれを達成する適切な方法は何ですか?

EDIT:

ProcessedUrl POJO:

public class ProcessedUrl { 

    private long id; 
    private String url; 
    private Date date; 
    private Set<Sentence> sentences; 

    public ProcessedUrl() { 
    } 

    public ProcessedUrl(String url, Date date) { 
     this.setUrl(url); 
     this.setDate(date); 
    } 
    public ProcessedUrl(String url, Date date, Set<Sentence> sentences) { 
     this.setUrl(url); 
     this.setDate(date); 
     this.setSentences(sentences); 
    } 

    public long getId() { 
     return id; 
    } 
    public void setId(long id) { 
     this.id = id; 
    } 

    public String getUrl() { 
     return url; 
    } 

    public void setUrl(String url) { 
     this.url = url; 
    } 

    public Date getDate() { 
     return date; 
    } 

    public void setDate(Date date) { 
     this.date = date; 
    } 

    public Set<Sentence> getSentences() { 
     return this.sentences; 
    } 

    public void setSentences(Set<Sentence> sentences) { 
     this.sentences = sentences; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if(this == obj) return true; 
     if(!(obj instanceof ProcessedUrl)) return false; 

     ProcessedUrl that = (ProcessedUrl) obj; 
     EqualsBuilder eb = new EqualsBuilder(); 
     eb.append(this.getUrl(), that.getUrl()); 
     return eb.isEquals(); 
    } 

    @Override 
    public int hashCode() { 
     HashCodeBuilder hcb = new HashCodeBuilder(); 
     hcb.append(url); 
     return hcb.toHashCode(); 
     } 

} 

ProcessedUrl.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping package="model"> 

    <class name="ProcessedUrl"> 
     <id name="id"> 
       <column name="url_id" /> 
       <generator class="native"/> 
     </id> 
     <property name="url" type="text"/> 
     <property name="date" type="java.util.Date" /> 

     <set name="sentences" cascade="all" > 
      <key column="PROCESSED_URL_ID" /> 
      <one-to-many class="model.Sentence" /> 
     </set>    
    </class> 
</hibernate-mapping> 
+0

ポストのcompletを無視ProcessedUrl POJOと現在のhbm xmlファイルのeコード? – developer

+0

@javaguyここはあなたです。 – Saris

答えて

0

ユーザが既に解析され、DBに格納されているいくつかのURLに入り、 これは再び解析されず/複製されません。 hbm.xmlマッピングを使用してこれを達成する適切な方法は何ですか?以前に解析されたURLは既にデータベースに保存され、あなたが最後に受信したURLの値がデータベースにすでに存在していることを検証する必要がありますされているので

あなたは、単純なHBMマッピングでこれを行うことはできません。

ので、これを達成するために、あなたは以下の手順を実行する必要があります。

(1)アプリからURLを取得します(ここでは解析しません)

(2)データベースにすでに存在しているURLを確認してくださいURLは、存在NOW URLを解析し、データベース

に保存していない場合は

(3)(4)URLがすでに存在する場合は、警告/エラーをログに記録したり、要求

関連する問題