Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] Using a custom collection in EclipseLink

Would something like this work?

public class Foo {
     @OneToMany
     @Converter(name="StackToList", converterClass=StackToListConverter.class)
     @Convert("StackToList")
     private Stack<Bar> stack;

     //etc.
}

public class StackToListConverter implements Converter {
     public Object convertObjectValueToDataValue(Object objectValue, Session session) {
         Stack stack = (Stack) objectValue;
         return stack.asList();
     }

     public Object convertDataValueToObjectValue(Object dataValue, Session session) {
          List list = (List) dataValue;
          return new Stack(list);
     }
}

On Wed, Nov 23, 2011 at 6:19 AM, James Sutherland <jamesssss@xxxxxxxxx> wrote:

I would recommend extending Collection, or using the existing Stack class in
Java.
You could define your own ContainerPolicy to handle your Stack, but probably
not the easiest solution.

You could also just map it as a List and use get/set methods to wrap the
List with your Stack.  That would probably be the easiest solution, and
would also support LAZY.

See,
http://en.wikibooks.org/wiki/Java_Persistence/Basic_Attributes#Conversion


Brennan Spies-3 wrote:
>
> Is there a good example of how to do this (custom collections with EAGER
> loading)? My code is like so:
>
> public interface Stack<E>
> {
> /**
>  * Removes the top of the stack and returns it.
>  * @return The item at the top of the stack
>  * @throws EmptyStackException If the stack is empty
>  */
> public E pop() throws EmptyStackException;
>  /**
>  * Pushes an item onto the stack.
>  * @param item The item to push onto the stack
>  * @return The item added, or null if item could not be added
>  */
> public E push(E item);
>
>         //etc....
> }
>
> The primary implementation simply wraps an ArrayList:
>
> public class ArrayStack<E> implements Stack<E>, Cloneable
> {
> private List<E> list;
>  public ArrayStack() {
> list = new ArrayList<E>();
> }
>  private ArrayStack(List<E> list) {
> this.list = list;
> }
>
>        //etc....
> }
>
> I don't actually want to extend the Collection interface, as that contains
> methods I don't want Stack<E> to have.
>
>
> On Wed, Nov 16, 2011 at 10:40 AM, James Sutherland
> <jamesssss@xxxxxxxxx>wrote:
>
>>
>> What is it a collection of?
>>
>> EclipseLink allows collection implementations is you use EAGER on the
>> mapping.  LAZY is not supported with implementation because it requires
>> the
>> interface to allow EclipseLink to use its own lazy collection
>> implementation.
>>
>> I don't think trying to make is an Embeddable is what you want... perhaps
>> include your code.
>>
>>
>>
>> Brennan Spies-3 wrote:
>> >
>> > Hi all,
>> >
>> > I'm a bit new to EclipseLink, and am struggling to figure out a way to
>> use
>> > a custom collection: a custom Stack interface with a standard
>> > implementation, ArrayStack, that simply wraps a java.util.List. As a
>> first
>> > go, I've specified the ArrayStack as being @Embeddable, and mapped the
>> > list
>> > directly using @ElementCollection. But EclipseLink needs a
>> "targetClass"
>> > to
>> > do that, but I don't want to specify it in the @Embeddable directly
>> since
>> > I
>> > am using it in more than one entity type.
>> >
>> > Is there an EclipseLink-specific way to override the "targetClass" on
>> this
>> > List, or a way to do this using a DescriptorCustomizer?
>> >
>> >
>>
>
>


-----
http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland
http://www.eclipse.org/eclipselink/
 EclipseLink ,  http://www.oracle.com/technology/products/ias/toplink/
TopLink
Wiki:  http://wiki.eclipse.org/EclipseLink EclipseLink ,
http://wiki.oracle.com/page/TopLink TopLink
Forums:  http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink ,
http://www.nabble.com/EclipseLink-f26430.html EclipseLink
Book:  http://en.wikibooks.org/wiki/Java_Persistence Java Persistence
Blog:  http://java-persistence-performance.blogspot.com/ Java Persistence
Performance
--
View this message in context: http://old.nabble.com/Using-a-custom-collection-in-EclipseLink-tp32838298p32874106.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.

_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users


Back to the top