Проблема с абстрактным классом и Spring - PullRequest
2 голосов
/ 06 июля 2011

Я разрабатываю простое веб-приложение на основе Spring Framework. У меня есть эти два файла, которые являются ответом для отображения таблиц базы данных:

import javax.persistence.*;
import java.util.Date;

/**
 * Abstract class for all publications of BIS
 * @author Tomek Zaremba
 */

public abstract class GenericPost {

@Temporal(TemporalType.DATE)
@Column(name = "date_added")
private Date dateAdded;

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

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

/**
 *
 * @return title of publication
 */
public String getTitle() {
    return title;
}

/**
 *
 * @param title to be set for publication
 */
public void setTitle(String title) {
    this.title = title;
}

/**
 *
 * @return description of publication
 */
public String getDescription() {
    return description;
}

/**
 *
 * @param description of publication
 */
public void setDescription(String description) {
    this.description = description;
}

/**
 *
 * @return date when publication was added
 */
public Date getDateAdded() {
    return dateAdded;
}

/**
 *
 * @param dateAdded set the date of adding for publication
 */
public void setDateAdded(Date dateAdded) {
    this.dateAdded = dateAdded;
}
}

и еще:

import javax.persistence.*;
import java.io.Serializable;

/**
 * Instances of Link represents and collects data about single link stored in BIS    database
 * @author Tomek Zaremba
 */
@Entity
@Table(name="Link", schema="public")
public class Link extends GenericPost implements Serializable{

@Id
@Column(name="id", unique=true)
@GeneratedValue(strategy= GenerationType.SEQUENCE, generator="link_id_seq")
@SequenceGenerator(sequenceName="link_id_seq", name="link_id_seq")
private Integer id;

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

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "author_user_id")
private User user;

/**
 *
 * @return id of link
 */
public Integer getId() {
    return id;
}

/**
 *
 * @param id to be set to link
 */
public void setId(Integer id) {
    this.id = id;
}

/**
 *
 * @return link which is connected with Link instance
 */
public String getLink() {
    return link;
}

/**
 *
 * @param link to be set fo Link instance
 */
public void setLink(String link) {
    this.link = link;
}

/**
 *
 * @return User instance connected with Link instance
 */
public User getUser() {
    return user;
}

/**
 *
 * @param user to be set for Link instance
 */
public void setUser(User user) {
    this.user = user;
}
}

Проблема заключается в следующем: почему, когда я использую методы из универсального класса (геттеры), я всегда получаю нулевое значение, а когда я использую геттеры из класса Link, я получаю правильные данные? Доступ к базе данных в порядке, тесты Junit проходят без ошибок. Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 06 июля 2011

Я не думаю, что это вина Спринг. Вам нужно аннотировать ваш родительский класс с помощью @MappedSuperclass

0 голосов
/ 06 июля 2011

Класс GenericPost должен быть аннотирован @MappedSuperclass.Иначе, его постоянные аннотации не принимаются во внимание при отображении.

Примечание. Ваши модульные тесты, вероятно, следует обновить, чтобы убедиться, что отображение полей суперкласса работает должным образом.

...