link-move icon indicating copy to clipboard operation
link-move copied to clipboard

importing many-to-many relationships feature

Open vitalz opened this issue 8 years ago • 2 comments

Cayenne does not generate (associative) entity classes for many-to-many database tables when junction table just keeps only foreign keys: for instance, product and right has relationship defined by table record {product_id, right_id}. LinkMove has to provide ability to import/remove relationships in a some way like:

    LmTask task = lmRuntime.getTaskService()
                            .createOrUpdateRelationship(Product.class, Right.class)
			.sourceExtractor("product_group_has_right")
			.matchBy(Product.class, Right.class)
			.task();

Issue is per my talk to @rzen.

vitalz avatar Jun 19 '17 15:06 vitalz

I like the idea, but the proposed implementation does not make much sense. Product and Right may have multiple relationships.

A junction table is a database entity, and the most natural solution would be to provide the API to synchronize database entities. Most parts should be already there, e.g.

  • source extractor can map to database columns (i.e. in your case will contain mappings for db:product_id and db:right_id)
  • rows can be matched by PK via matchById() (might need some tweaks if it relies on the ObjectId internally)

atomashpolskiy avatar Jun 20 '17 08:06 atomashpolskiy

+1 on DbEntity sync. I had a similar idea when we discussed it with @rzen .

@atomashpolskiy : let's discuss offline some time after July 3 (or sooner over video chat if you need to).

andrus avatar Jun 20 '17 10:06 andrus