*Hi *Caram it's good to say hi to you again...  jeje Just Kidding.

yup, you are generating an automatic ID, but that's why there is double
records, because there is for instance 2 differents IDs for the same
records. I mean:

let's suppose the initial data in your data store is like following:
*ID   name  desc.*
1.    hello   whatever.

but if you try to upload the same data in an CSV file, like this.

*name   desc.*
hello    whatever
hello    whatever1.

after uploading the file the data in datastore would be something like this.

*ID  name  desc.*
1.   hello  whatever.
2.   hello  whatever.
3.   hello  whatever1.

because the ID, is been generated every time that an insert occurs.

If you want to avoid this, you can add something to the Constructor of the
class to manage this. For example:

*public Login(String user, String password) {
               Key key = KeyFactory.createKey(Login.class.getSimpleName(),
user);
               this.user = user;
               this.password = password;
       }*

This will make the following:

when inserting for the first time the data:
user: "hello"
pass: "world"

the Datastore would be like this.

*Key                      user        password.*
Login("hello")        hello        world.

then when uploading new data from CSV, smthg like this.

hello         newworld
hello2       world2
hello3       world3

 the data store would be like this.

*key                     user             password.*
Login("hello")      hello             newworld
Login("hello2")    hello2           world2
Login("hello3")    hello3           world3

As you can see, in the user "hello" the data was just update, so there's no
double records, but the others are inserted as new ones.
this happens because the Key of your Entity is generated depending on the
user, and since the Key is unique, when making "MakePersistenceAll()" the
Data just is written over the previous data, if there is already a record
with the same Key, then data is updated, otherwise is inserted.

Hope this was helpful.

Rgds.

R. F

2010/8/12 Caram <caram.jun...@gmail.com>

> I'm confused.
>
> My class Login of persistence is:
> ---------------------------------------------------------------
> import javax.jdo.annotations.IdGeneratorStrategy;
> import javax.jdo.annotations.PersistenceCapable;
> import javax.jdo.annotations.Persistent;
> import javax.jdo.annotations.PrimaryKey;
>
> @PersistenceCapable
> public class Login {
>
>        @PrimaryKey
>        @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
>        private Long id;
>
>        @Persistent
>        private String user;
>
>        @Persistent
>        private String password;
>
>
>
>        public String getUser() {
>                return user;
>        }
>
>        public void setUser(String user) {
>                this.user = user;
>        }
>
>        public String getPassword() {
>                return password;
>        }
>
>        public void setPassword(String password) {
>                this.password = password;
>        }
>
> }
>
> ---------------------------------------------------------------------------------
>
> So, I'm storing the Entity and automatic generating the ID. Right? If
> true, my data should not double as is happening, right?
>
> Thank you very much!
>
> Rgds,
> Caram.:
>
> On 11 ago, 18:38, Ronmell Fuentes <ringe...@gmail.com> wrote:
> > yup, just in case the ID is not generated when storing the Entity.
> > ;-)
> > otherwise the ID 'd be generated every time the data'd be stored.
> >
> > 2010/8/11 Caram <caram.jun...@gmail.com>
> >
> >
> >
> > > But, in
> > >http://code.google.com/intl/en/appengine/docs/python/tools/uploadingd.
> ..
> > > ,
> > > he said:
> >
> > > "When data is downloaded, the entities are stored along with their
> > > original keys. When the data is uploaded, the original keys are used.
> > > If an entity exists in the datastore with the same key as an entity
> > > being uploaded, the entity in the datastore is replaced.
> >
> > > You can use upload_data to replace the data in the app from which it
> > > was dumped, or you can use it to upload the data to a different
> > > application. Entities with numeric system IDs will be uploaded with
> > > the same IDs, and reference properties will be preserved."
> >
> > > So, my ID of Login is Long, I understand that it should be updating
> > > like he said above and not adding as is happening.
> >
> > > Am I right?
> >
> > > Thanks!
> > > Caram.:
> >
> > > On 11 ago, 15:57, Ronmell Fuentes <ringe...@gmail.com> wrote:
> > > > Hi, ok.
> > > > what happens is the following.
> >
> > > > As you already know, in DataStore there's no "update" because when
> you
> > > > insert a record, depending on the Primary Key you have set in your,
> all
> > > the
> > > > new data just falls over the first records. This means, that if you
> are
> > > > generating an ID every time an insert is done, this will keep until
> > > always.
> > > > jeje. But if for example you set a primary Key based on an field of
> your
> > > > entity, for example you set
> > > > Primary Key(MyField);  where MyField is a string name, this will
> create
> > > > something like this.
> > > > For MyField="helloworld1";
> >
> > > > MyEntity("helloworld1");
> >
> > > > For MyField="helloworld2";
> >
> > > > MyEntity("helloworld1");
> >
> > > > and so on...
> >
> > > > So that, the main point here is, when inserting a new record, and the
> > > value
> > > > of the Primary Key is not set by yourself, this will automatically
> create
> > > a
> > > > new record. All data will be inserted again and again.
> >
> > > > if you already have the ID=1;
> > > > and you try to insert a new record with ID=1 and ID is the primary
> key,
> > > then
> > > > the record won't be inserted again, but will be updated.
> >
> > > > As you can see, all depends on the way you create your Entities or
> > > Classes .
> >
> > > > Rgds.
> >
> > > > R. F.
> >
> > > > 2010/8/11 Caram <caram.jun...@gmail.com>
> >
> > > > > Ronmell,
> >
> > > > > These days I study and I succeed in download data from datastore
> > > > > in .csv.
> > > > > I understand that I can modifiy this .csv and upload it to make the
> > > > > changes in my datastore. But, when I try to upload it, duplicate in
> my
> > > > > datastore all entities I have. It changes the ID to name, I've
> tried
> > > > > many things unsuccessfully, can you help me?
> >
> > > > > Here my commands/codes:
> >
> > > > > bulkloader.yaml:
> >
> > >
> ---------------------------------------------------------------------------
> > > --------------
> > > > > # Autogenerated bulkloader.yaml file.
> > > > > # You must edit this file before using it. TODO: Remove this line
> when
> > > > > done.
> > > > > # At a minimum address the items marked with TODO:
> > > > > #  * Fill in connector and connector_options
> > > > > #  * Review the property_map.
> > > > > #    - Ensure the 'external_name' matches the name of your CSV
> column,
> > > > > #      XML tag, etc.
> > > > > #    - Check that __key__ property is what you want. Its value will
> > > > > become
> > > > > #      the key name on import, and on export the value will be the
> Key
> > > > > #      object.  If you would like automatic key generation on
> import
> > > > > and
> > > > > #      omitting the key on export, you can remove the entire
> __key__
> > > > > #      property from the property map.
> >
> > > > > # If you have module(s) with your model classes, add them here.
> Also
> > > > > # change the kind properties to model_class.
> > > > > python_preamble:
> > > > > - import: base64
> > > > > - import: re
> > > > > - import: google.appengine.ext.bulkload.transform
> > > > > - import: google.appengine.ext.bulkload.bulkloader_wizard
> > > > > - import: google.appengine.api.datastore
> > > > > - import: google.appengine.api.users
> >
> > > > > transformers:
> >
> > > > > - kind: Login
> > > > >  connector: csv
> >
> > > > >  property_map:
> > > > >    - property: __key__
> > > > >      external_name: ID
> > > > >      export_transform: transform.key_id_or_name_as_string
> >
> > > > >    - property: password
> > > > >      external_name: password
> >
> > > > >    - property: user
> > > > >      external_name: user
> >
> > >
> ---------------------------------------------------------------------------
> > > ----------------------------------
> >
> > > > > For download:
> > > > > appcfg.py download_data -e caram.jun...@gmail.com --
> > > > > config_file=bulkloader.yaml --kind=Login --filename=teste.csv --
> > > > > url=http://pac-web.appspot.com/remote_api
> >
> > > > > Result (teste.csv):
> >
> > >
> ---------------------------------------------------------------------------
> > > -------------------------------
> > > > > password,ID,user
> > > > > swdw,1,User
> > > > > CARACA,1001,User
> > > > > CARACA2,2001,User
> > > > > ,3001,
> > > > > edsed,4001,User
> > > > > edsed,4002,User43
> > > > > edsed,5001,User43
> > > > > edsed,6001,User47
> >
> > >
> ---------------------------------------------------------------------------
> > > -------------------------------
> >
> > > > > For upload (result inhttps://appengine.google.com/datastore, kind
> > > > > Login):
> >
> > >
> ---------------------------------------------------------------------------
> > > -------------------------------
> > > > > ID/Name  password        user
> > > > >        id=1     swdw    User
> > > > >        id=1001  CARACA  User
> > > > >        id=2001  CARACA2         User
> > > > >        id=3001  <null>  <null>
> > > > >        id=4001  edsed   User
> > > > >        id=4002  edsed   User43
> > > > >        id=5001  edsed   User43
> > > > >        id=6001  edsed   User47
> > > > >        name=1   swdw    User
> > > > >        name=1001        CARACA  User
> > > > >        name=2001        CARACA2         User
> > > > >        name=3001
> > > > >        name=4001        edsed   User
> > > > >        name=4002        edsed   User43
> > > > >        name=5001        edsed   User43
> > > > >        name=6001        edsed   User47
> >
> > >
> ---------------------------------------------------------------------------
> > > -------------------------------
> >
> > > > > Rgds!
> > > > > Caram.:
> >
> > > > > On 5 ago, 16:30, Ronmell Fuentes <ringe...@gmail.com> wrote:
> > > > > > jeje ok ok.
> > > > > > In the doc related to python, there you can find information
> about
> > > how to
> > > > > > write your Exporter/Loader classes.
> >
> > > > > > Happy Codding.
> >
> > > > > > Rgds.
> >
> > > > > > R. F.
> >
> > > > > > 2010/8/5 Caram <caram.jun...@gmail.com>
> >
> > > > > > > I would search about item 5 because I "traveled", understand
> > > > > > > nothing... :)
> >
> > > > > > > Thanks!
> >
> > > > > > > On 5 ago, 15:45, Ronmell Fuentes <ringe...@gmail.com> wrote:
> > > > > > > > Ok.
> > > > > > > > 1.  appcfg.py can be used whether your app is written in Java
> or
> > > > > Python.
> > > > > > > > 2.  when they speak about "remote_api" is right, you need to
> > > write
> > > > > some
> > > > > > > > lines in your web.xml file to allow the connection remotely.
> > > > > > > > 3.  when it's mentioned
> > > > > > > > com.google.apphosting.utils.remoteapi.RemoteApiServlet  is
> the
> > > name
> > > > > of
> > > > > > > the
> > > > > > > > servlet which answer the request of connection, so that, you
> have
> > > to
> > > > > > > write
> > > > > > > > the name of the servlet, and also have to map it to the URL
> where
> > > the
> > > > > > > tool
> > > > > > > > is redirected when trying to connect.
> >
> > > > > > > > 4.  The app.yaml is a file which is written when developing
> an
> > > app
> > > > > made
> > > > > > > in
> > > > > > > > python, so at this point it's useless.
> >
> > > > > > > > 5. If you are going to use a tool such as appcfg.py or
> > > bulkloader.py
> > > > > you
> > > > > > > > have to write some files in order to manage your data in
> > > datastore.
> > > > > This
> > > > > > > is
> > > > > > > > very important since when using the dataStore we have
> schemaless,
> > > so
> > > > > the
> > > > > > > > tool doesn't know how to deal with data stored in datastore,
> thus
> > > you
> > > > > > > have
> > > > > > > > to write a file for loading/downloading the data. These files
> > > > > contains
> > > > > > > the
> > > > > > > > classes called Exporter/Loader. In google docs for GAE there
> is
> > > > > > > information
> > > > > > > > about this issue.
> >
> > > > > > > > 6.  Personally when I knew I had to deal with data stored in
> > > > > DataStore
> > > > > > >  of
> > > > > > > > my App, I decided to build my own tool for doing this. I took
> the
> > > > > > > > Service-Rest way. This means that I have a Service (Rest
> type)
> > > > > listening,
> > > > > > > > running on my app so that I can connect remotely to this
> service
> > > and
> > > > > tell
> > > > > > > it
> > > > > > > > to do pretty much whatever I want and what it was programmed
> for.
> >
> > > > > > > > There is an opensource product for this.
> http://www.restlet.org/
> > > > > > > > this is the related documentation.
> >
> > >http://wiki.restlet.org/docs_2.0/13-restlet/21-restlet/318-restlet.html
> >
> > > > > > > > For me it works perfectly and it's not too difficult to
> > > understand
> > > > > the
> > > > > > > > concept.
> >
> > > > > > > > Hope this is helpful.
> > > > > > > > Rgds
> >
> > > > > > > > R. F.
> > > > > > > > any doubt I'm always willing to help.
> >
> > > > > > > > 2010/8/5 Caram <caram.jun...@gmail.com>
> >
> > > > > > > > > I'm confused!
> >
> > > > > > > > > I uploaded a Java app.
> >
> > > > > > > > > I installed Python 2.7 and GAE for Python to work with the
> > > remote
> > > > > > > > > database.
> >
> > > > > > > > > I'm following this link:
> >
> > > > >
> http://code.google.com/intl/en/appengine/docs/python/tools/uploadingd.
> > > > > > > ..
> > > > > > > > > but I'm confused because this article is for Python, not
> for
> > > Java
> > > > > app.
> > > > > > > > > It have a tip in beginning:
> >
> > > > > > > > > "If you have a Java app, you can use the Python appcfg.py
> tool
> > > by
> > > > > > > > > installing the Java version of the remote_api handler,
> which is
> > > > > > > > > included with the Java runtime environment. The handler
> servlet
> > > > > class
> > > > > > > > > is
> >
> > ...
> >
> > mais »
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine for Java" group.
> To post to this group, send email to
> google-appengine-j...@googlegroups.com.
> To unsubscribe from this group, send email to
> google-appengine-java+unsubscr...@googlegroups.com<google-appengine-java%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/google-appengine-java?hl=en.
>
>


-- 
ausencia de evidencia  ≠  evidencia de ausencia
http://culturainteractiva.blogspot.com/

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to