I have an abstract class AbstractDAO that all of my other DAO objects extend.
@MappedSuperclass
public abstract class AbstractDAO implements Serializable {
private static final long serialVersionUID = 1L;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="feed_id", insertable=false, updatable=false)
@Getter @Setter private FeedDAO feed;
@Column(name="feed_id")
@Getter @Setter private Long feedId;
}
Then I have the InventoryDAO that extends this class:
@Entity
@Table(catalog="feed", name = "inventory")
public class InventoryDAO extends AbstractDAO {
/** Serial ID for this class **/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy="increment")
@Column(name="id")
@Getter @Setter private Long id;
}
And this is the FeedDAO:
@Entity
@Table(catalog="feed", name = "feed")
public class FeedDAO extends AbstractDAO {
/** Serial ID **/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy="increment")
@Column(name="feed_id")
@Getter @Setter private Long id;
}
When I query for the InventoryDAO, the feedId field is set and the feed field is null.
InventoryDAO: {"id":1,"feed":null,"feedId":10}
However, if I query for the FeedDAO first and then for the InventoryDAO, the feed field is set.
InventoryDAO: {"id":1,"feed":{"id":10},"feedId":10}
Now, if I change the @ManyToOne(fetch=FetchType.LAZY) to @ManyToOne(fetch=FetchType.EAGER) and query for the InventoryDAO, the feed field is always set.
InventoryDAO: {"id":1,"feed":{"id":10},"feedId":10}
Is this a mapping issue or a limitation of the @MappedSuperclass?