1
0
mirror of https://github.com/Rogiel/l2jserver2 synced 2025-12-06 07:32:46 +00:00

Implements OrientDB artificial primary key generations

Generated primary keys use the document ReferenceID in order to provide
the generated ID. Differently from SQL based databases, IDs generated by
this system are 0 indexed
This commit is contained in:
2011-12-26 14:33:42 -02:00
parent d72a28f616
commit a539702dc4
3 changed files with 15 additions and 5 deletions

View File

@@ -383,9 +383,15 @@ public abstract class AbstractOrientDatabaseService extends AbstractService
property.setType(OType.getTypeByClass(path.getType())); property.setType(OType.getTypeByClass(path.getType()));
} }
final boolean nullable = QPathUtils.isNullable(path); final boolean nullable = QPathUtils.isNullable(path);
if (property.isNotNull() != !nullable) final boolean autoIncrement = QPathUtils
.isAutoIncrementable(path);
if (property.isNotNull() && autoIncrement)
property.setNotNull(false);
else if (property.isNotNull() != !nullable && !autoIncrement)
property.setNotNull(!nullable); property.setNotNull(!nullable);
if (property.isMandatory() != !nullable) if (property.isMandatory() && autoIncrement)
property.setMandatory(false);
else if (property.isMandatory() != !nullable && !autoIncrement)
property.setMandatory(!nullable); property.setMandatory(!nullable);
} }
for (final ForeignKey<?> fk : table.getForeignKeys()) { for (final ForeignKey<?> fk : table.getForeignKeys()) {
@@ -578,8 +584,13 @@ public abstract class AbstractOrientDatabaseService extends AbstractService
if (primaryKey != null && object instanceof Model) { if (primaryKey != null && object instanceof Model) {
final Long rawID = row.getDocument().getIdentity() final Long rawID = row.getDocument().getIdentity()
.getClusterPosition(); .getClusterPosition();
row.getDocument()
.field(primaryKey.getMetadata().getExpression()
.toString(), rawID.intValue());
row.getDocument().save(); // save, again!
final ID<? super RI> id = mapper.getPrimaryKeyMapper() final ID<? super RI> id = mapper.getPrimaryKeyMapper()
.createID((RI) rawID); .createID((RI) (Integer) rawID.intValue());
((Model<ID<? super RI>>) object).setID(id); ((Model<ID<? super RI>>) object).setID(id);
} }
rows++; rows++;

View File

@@ -37,7 +37,7 @@ public class ChatMessageMapper extends
private final PrimaryKeyMapper<ChatMessageID, Integer> idMapper = new PrimaryKeyMapper<ChatMessageID, Integer>() { private final PrimaryKeyMapper<ChatMessageID, Integer> idMapper = new PrimaryKeyMapper<ChatMessageID, Integer>() {
@Override @Override
public ChatMessageID createID(Integer raw) { public ChatMessageID createID(Integer raw) {
return idMapper.createID(raw); return idProvider.resolveID(raw);
} }
}; };

View File

@@ -122,7 +122,6 @@ public class CachedWorldIDService extends AbstractService implements
load(itemDao.selectIDs()); load(itemDao.selectIDs());
load(npcDao.selectIDs()); load(npcDao.selectIDs());
log.info("{} IDs loaded from database");
loaded = true; loaded = true;
} }