In this example we will have a slightly different table with a combined PK.
The complete code is here.
Create the table
The first thing we should do is to create the table we need for this example:
CREATE TABLE `my_data2` (
`userid` bigint(20) NOT NULL DEFAULT '0',
`friendid` bigint(20) NOT NULL DEFAULT '0',
`data` varbinary(255) DEFAULT NULL,
`last_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`userid`,`friendid`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
/*!50100 PARTITION BY KEY (userid) */
Mapping table to Java Interface
An interfae describing each table is needed. You annotate the code with @PrimaryKey and @Column do denote if the names of columns and the column names.
The only difference here is that you need to annotate all primary key columns with @PrimaryKey.
import com.mysql.clusterj.annotation.Column;
import com.mysql.clusterj.annotation.Index;
import com.mysql.clusterj.annotation.PersistenceCapable;
import com.mysql.clusterj.annotation.PrimaryKey;
@PersistenceCapable(table="my_data2")
@Index(name="id")
public interface MyData2 {
@PrimaryKey
long getUserId();
void setUserId(long i);
@PrimaryKey
long getFriendId();
void setFriendId(long i);
@Column(name = "data")
byte[] getData();
void setData(byte[] b);
@Column(name = "last_updated")
long getLastUpdated();
void setLastUpdated(long ts);
}
Performing an insert
Populate the fields in the object, and make it persistent. Don't forget to set all primary key columns or you will get a ClusterJException.
MyData my_data=s.newInstance(MyData.class);That is it, if you run the example code, you will see the output.
/**
* Set the data on the object
*/
my_data.setUserId(i);
my_data.setFriendId(i);
my_data.setData(data);
my_data.setLastUpdated(System.currentTimeMillis());
/**
* Persist the object */
s.makePersistent(my_data);
Done inserting 100 records in X ms
No comments:
Post a Comment