Here a two scenarios each with a Parent and Child Type, they should give
the same result
1. Concrete Parent Type
@PersistenceCapable()
public class ConcreteParentType {
@PrimaryKey()
@Persistent(valueStrategy=IdGeneratorStrategy.INCREMENT)
private Long id;
private String name;
@Column(allowsNull="true")
@MemberOrder(sequence = "1")
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
}
@PersistenceCapable()
public class ChildTypeOfConcreteParentType extends ConcreteParentType {
private String description;
@Column(allowsNull="true")
@MemberOrder(sequence = "2")
public String getDescription() {
return description;
}
public void setDescription(final String description) {
this.description = description;
}
}
2. Abstract Parent Type
@PersistenceCapable()
@Inheritance(strategy = InheritanceStrategy.SUBCLASS_TABLE)
abstract class AbstractParentType {
@PrimaryKey()
@Persistent(valueStrategy=IdGeneratorStrategy.INCREMENT)
private Long id;
private String name;
@Column(allowsNull="true")
@MemberOrder(sequence = "1")
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
}
@PersistenceCapable()
public class ChildTypeOfAbstractParentType extends AbstractParentType {
private String description;
@Column(allowsNull="true")
@MemberOrder(sequence = "2")
public String getDescription() {
return description;
}
public void setDescription(final String description) {
this.description = description;
}
}
In the seond scenario the name property doesn't appear, only the
description.
The DomainService class for testing these two scenarios in the viewer is
this:
@DomainService(nature=NatureOfService.VIEW_MENU_ONLY)
@DomainServiceLayout(named = "DataNucleus", menuBar = MenuBar.PRIMARY,
menuOrder = "100")
public class Menu {
public ChildTypeOfConcreteParentType
createChildTypeOfConcreteParentType() {
ChildTypeOfConcreteParentType childType = null;
try {
childType =
container.newTransientInstance(ChildTypeOfConcreteParentType.class);
childType.setName("ChildTypeOfConcreteParentType");
childType.setDescription("something descriptive");
container.persistIfNotAlready(childType);
} catch (Exception e) {
e.printStackTrace();
}
return childType;
}
public ChildTypeOfAbstractParentType
createChildTypeOfAbstractParentType() {
ChildTypeOfAbstractParentType childType = null;
try {
childType =
container.newTransientInstance(ChildTypeOfAbstractParentType.class);
childType.setName("ChildTypeOfAbstractParentType");
childType.setDescription("something descriptive");
container.persistIfNotAlready(childType);
} catch (Exception e) {
e.printStackTrace();
}
return childType;
}
@javax.inject.Inject
DomainObjectContainer container;
}
On Tue, Sep 1, 2015 at 10:42 PM, Stephen Cameron <[email protected]
> wrote:
> Hi Jeroen, just noticed this after sending second update (winge).
>
> I'll send a test case now.
>
> On Tue, Sep 1, 2015 at 10:29 PM, Jeroen van der Wal <[email protected]>
> wrote:
>
>> Hi Stephen,
>>
>> Can you share some code to support your case?
>>
>> Cheers,
>>
>> Jeroen
>>
>> On 1 September 2015 at 12:39, Stephen Cameron <[email protected]
>> >
>> wrote:
>>
>> > Hi,
>> >
>> > I've been trying today to find solutions to what seem to be Datanucleus
>> > issues, but without much success. So rather than solve the problems
>> created
>> > in my refactoring of my application, which has been too hard frankly,
>> I'm
>> > trying to start afresh with some simple test cases, show these work,
>> then
>> > add more complexity till I get where I want to be.
>> >
>> > So, I am starting this approach and I immediately have an issue, but
>> not a
>> > Datanucleus one, I find that the value properties of an abstract parent
>> > class don't appear in the Wicket viewer, whereas they do if the parent
>> > class is concrete. Is this correct and if so what is the reason?
>> >
>> > Thanks.
>> >
>>
>
>