Hello.
table Module (id number, title varchar2)
table Role (id number, title varchar2)
table Role_Module (role_id number, module_id)
[Entity]
[Table('MODULE')]
[Id('FID', TIdGenerator.None)]
TModule = class
private
[Column('ID', [TColumnProp.Required])]
FID: double;
[Column('TITLE', [TColumnProp.Required], 400)]
FTitle: string;
public
property ID: double read FID write FID;
property Title: string read FTitle write FTitle;
end;
[Entity]
[Table('ROLE_MODULE')]
[Id('FRole', TIdGenerator.None)]
[Id('FModule', TIdGenerator.None)]
TRoleModule = class
private
[Association([TAssociationProp.Lazy, TAssociationProp.Required], [])]
[JoinColumn('MODULE_ID', [TColumnProp.Required], 'ID')]
FModule: Proxy<TModule>;
[Association([TAssociationProp.Lazy, TAssociationProp.Required], [])]
[JoinColumn('ROLE_ID', [TColumnProp.Required], 'ID')]
FRole: Proxy<TRole>;
function GetModule: TModule;
procedure SetModule(const Value: TModule);
function GetRole: TRole;
procedure SetRole(const Value: TRole);
public
property Module: TModule read GetModule write SetModule;
property Role: TRole read GetRole write SetRole;
end;
[Entity]
[Table('ROLE')]
[Id('FID', TIdGenerator.IdentityOrSequence)]
[Sequence('role_seq')]
TRole = class
private
[Column('ID', [TColumnProp.Required])]
FID: double;
[Column('TITLE', [TColumnProp.Required], 400)]
FTitle: string;
[ManyValuedAssociation([TAssociationProp.Lazy, TAssociationProp.Required], CascadeTypeAll, 'FRole')]
FModules: Proxy<TList<TRoleModule>>;
function GetModules: TList<TRoleModule>;
public
constructor Create;
destructor Destroy; override;
property ID: double read FID write FID;
property Title: string read FTitle write FTitle;
property Modules: TList<TRoleModule> read GetModules;
end;
Role := TRole.Create;
Role.Title := 'abc';
RM := TRoleModule.Create;
RM.Role := Role;
RM.Module := ObjManager.Find<TModule>(1); //I already had item with ID = 1
Role.Modules.Add(RM);
ObjManager.Save(Role);
ObjManager.Save(Role);
for i := 0 to Role.Modules.Count - 1 do
ObjManager.Save(Role.Modules[ i]);