1

私は次のことをしようとしています:

public class Distance {

private Course courseA, courseB;
private int minDistance;
double cost;


private Long id;


public Distance() {
    super();
}

public Distance(Course courseA, Course courseB, int minDistance, double cost) {
    super();
    this.courseA = courseA;
    this.courseB = courseB;
    this.minDistance = minDistance;
    this.cost = cost;
}


@Override
public String toString() {
    return "Distance [courseA=" + courseA + ", courseB=" + courseB
            + ", MinDistance=" + minDistance + ", Cost=" + cost + "]";
}

public Course getCourseA() {
    return courseA;
}

public void setCourseA(Course courseA) {
    this.courseA = courseA;
}

public Course getCourseB() {
    return courseB;
}

public void setCourseB(Course courseB) {
    this.courseB = courseB;
}

public int getMinDistance() {
    return minDistance;
}

public void setMinDistance(int minDistance) {
    this.minDistance = minDistance;
}

public double getCost() {
    return cost;
}

public void setCost(double cost) {
    this.cost = cost;
}

@Id
public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

}  

Course は、私が作成した別のクラスです。

public class Course {


private Long id;

private String name;

private Calendar date;

public Course() {
    super();
}
public Course(Long id,String name, Calendar date) {
    super();
    this.id = id;
    this.name = name;
    this.date = date;
}

@Override
public String toString() {
    return "Course [id=" + id + ", name=" + name + ", examDate=" + date
            + "]";
}

@Id
public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public Calendar getDate() {
    return date;
}
public void setDate(Calendar date) {
    this.date = date;
}
/* (non-Javadoc)
 * @see java.lang.Object#hashCode()
 */
@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((id == null) ? 0 : id.hashCode());
    return result;
}
/* (non-Javadoc)
 * @see java.lang.Object#equals(java.lang.Object)
 */
@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (!(obj instanceof Course)) {
        return false;
    }
    Course other = (Course) obj;
    if (id == null) {
        if (other.id != null) {
            return false;
        }
    } else if (!id.equals(other.id)) {
        return false;
    }
    return true;
}

}

「distance.hbm.xml」で、courseA と B を Distance のプロパティとして定義しようとしましたが、例外がありました org.hibernate.MappingException: Could not determine type for: database.datatypes.Course at table:distances...
。courseA と B をコンポーネントとして宣言しようとしましたが、「成功」しましたが、呼び出したときにsession.load(Distance.class,1L)右が返されましたオブジェクトですが、2 つのコースは null ポインターでした。

どうやって定義するの!?

また、どうすれば同じことができますが、ライブラリからの複雑なクラス (java.util のようなもの) の場合です。

ありがとう!

更新: 私は自分のケーキを持って、Distance-Course のことでそれを回避する方法を見つけましたが、私にとって重要なことがあります: コースには日付オブジェクトが含まれている必要があります。むしろ java.util.Calendar を使用したいのですが、それが問題になる場合は、代わりに使用できる日付を取得する他の方法はありますか?

再度、感謝します!

4

1 に答える 1

1

次の方法でそれを達成できます。

@Entity
@Table(name="distance")
public class Distance {

private Course courseA, courseB;

@Embedded
public getCourseA(){
return this.courseA;
}

@Embedded
public getCourseB(){
return this.courseB;
}

}

埋め込み可能なクラス:

@Embeddable
public class Address implements Serializable{

@Transient
public Long getId() {
    return id;
}

@Column
public String getName() {
    return name;
}

}

@Embaddableクラスはエンティティではないため、主キーを持つべきではありません。@Transientこれが、id プロパティを使用する必要がある理由です。

于 2012-05-02T19:08:45.677 に答える