/** Convenience for {@link #addToOne(Entity, Property)} with a subsequent call to {@link ToOne#setName(String)}. */ public ToOne addToOne(Entity target, Property fkProperty, String name) { ToOne toOne = addToOne(target, fkProperty); toOne.setName(name); return toOne; }
/** * Adds a to-one relationship to the given target entity using the given given foreign key property (which belongs * to this entity). */ public ToOne addToOne(Entity target, Property fkProperty) { if (protobuf) { throw new IllegalStateException("Protobuf entities do not support realtions, currently"); } Property[] fkProperties = {fkProperty}; ToOne toOne = new ToOne(schema, this, target, fkProperties, true); toOneRelations.add(toOne); return toOne; }
private void init3rdPassRelations() { Set<String> toOneNames = new HashSet<>(); for (ToOne toOne : toOneRelations) { toOne.init3ndPass(); if (!toOneNames.add(toOne.getName().toLowerCase())) { throw new RuntimeException("Duplicate name for " + toOne); } } Set<String> toManyNames = new HashSet<>(); for (ToManyBase toMany : toManyRelations) { toMany.init3rdPass(); if (toMany instanceof ToMany) { Entity targetEntity = toMany.getTargetEntity(); for (Property targetProperty : ((ToMany) toMany).getTargetProperties()) { if (!targetEntity.propertiesColumns.contains(targetProperty)) { targetEntity.propertiesColumns.add(targetProperty); } } } if (!toManyNames.add(toMany.getName().toLowerCase())) { throw new RuntimeException("Duplicate name for " + toMany); } } }
public ToOne addToOneWithoutProperty(String name, Entity target, String fkColumnName, boolean notNull, boolean unique) { PropertyBuilder propertyBuilder = new PropertyBuilder(schema, this, null, name); if (notNull) { propertyBuilder.notNull(); } if (unique) { propertyBuilder.unique(); } propertyBuilder.dbName(fkColumnName); Property column = propertyBuilder.getProperty(); Property[] fkColumns = {column}; ToOne toOne = new ToOne(schema, this, target, fkColumns, false); toOne.setName(name); toOneRelations.add(toOne); return toOne; }
toOne.init2ndPass(); Property[] fkProperties = toOne.getFkProperties(); for (Property fkProperty : fkProperties) { if (!propertiesColumns.contains(fkProperty)) {
Entity targetEntity = toOne.getTargetEntity(); checkAdditionalImportsEntityTargetEntity(targetEntity);
/** Constructs fkColumns. Depends on 2nd pass of target key properties. */ void init3ndPass() { Property targetPkProperty = targetEntity.getPkProperty(); if (fkProperties.length != 1 || targetPkProperty == null) { throw new RuntimeException("Currently only single FK columns are supported: " + this); } Property property = fkProperties[0]; PropertyType propertyType = property.getPropertyType(); if (propertyType == null) { propertyType = targetPkProperty.getPropertyType(); property.setPropertyType(propertyType); // Property is not a regular property with primitive getters/setters, so let it catch up property.init2ndPass(); property.init3ndPass(); } else if (propertyType != targetPkProperty.getPropertyType()) { System.err.println("Warning to-one property type does not match target key type: " + this); } resolvedKeyJavaType[0] = schema.mapToJavaTypeNullable(propertyType); resolvedKeyUseEquals[0] = checkUseEquals(propertyType); }
protected void createRelation() { Entity relationEntity = schema.addEntity("RelationEntity"); relationEntity.addIdProperty(); Property parentIdProperty = relationEntity.addLongProperty("parentId").getProperty(); relationEntity.addToOne(relationEntity, parentIdProperty).setName("parent"); Property testIdProperty = relationEntity.addLongProperty("testId").getProperty(); relationEntity.addToOne(testEntity, testIdProperty); Property testIdNotNullProperty = relationEntity.addLongProperty("testIdNotNull").notNull().getProperty(); relationEntity.addToOne(testEntity, testIdNotNullProperty).setName("testNotNull"); relationEntity.addStringProperty("simpleString"); relationEntity.addToOneWithoutProperty("testWithoutProperty", testEntity, "WITHOUT_PROPERTY_TEST_ID"); }
protected void createTreeEntity() { Entity treeEntity = schema.addEntity("TreeEntity"); treeEntity.addIdProperty(); Property parentIdProperty = treeEntity.addLongProperty("parentId").getProperty(); treeEntity.addToOne(treeEntity, parentIdProperty).setName("parent"); treeEntity.addToMany(treeEntity, parentIdProperty).setName("children"); }